务虚的全栈式开发

当你想开发一款APP时候,一般由如下三种选择

一:自己开发客户端和服务器所有部分

1:客户端(APP)

1.1 本地开发:  IOS用OC/Swift开发, Android用Java开发; 需要调用第三方的lib(C/C++)时候:如果调用的函数过多,推荐用Swig(尤其是Java调用C/C++),可以省去很多麻烦:当然了多了一层函数调用,性能其实差不了多少。

1.2 混合开发: 对于性能要求不怎么高的APP(除了游戏/音视频):大部分可以用混合开发(主要是JS)同时支持IOS和Android,或者更多的平台。混合开发有很多种:当今比较流行的开源的的是Apache的Cordova(Ionic on Angular on Cordova)和Facebook的React Native。混合开发的优点是一套JS API(包括UI和下层的硬件调用)可以支持多个平台,一个JS开发人员可以同时开发IOS/Android/其他的APP. 缺点是对于性能有求高的APP用户体验不好。React Native可以直接调用Native API的机制注定比Cordova的WebView性能好;至于别的混合开发或者是商业软件或者支持不好,不提也罢。

   注意:如果你的APP需要集成第三方的API,请注意第三方API是否支持JS

1.3  和服务器通信:无论采用本地开发还是混合开发,必须首先考虑如何和服务器通信

1)基于Socket通信

2)使用基于Socket(或者Websocket)的协议:XMPP/SIP或者MQTT

3)HTTP/RESTFUL(需要使用服务器的自定义接口): RPC已经基本被REST取代

2: 服务器

服务器一般由三层组成,负载均衡服务器集群,业务服务器集群,数据库服务器集群

2.1: 负载均衡:一般开源的使用LVS/Nginx/HaProxy集群,商用的有F5; 和客户端的通信和1.3一致

2.2 业务服务器集群

1) 实时端到端业务: 集群服务器需要保存用户当前的连接服务器:譬如聊天服务器用户1注册在服务器A,用户2注册在服务器B, 如果1要打电话给2, 服务器A需要知道2当前在

服务器B上有TCP连接并把收到的用户1的信令转给服务器B,B再发送给2; 这种集群一般把用户当前连接数据统一存放一台或几台服务器,业务服务器之间需要直接通信

2)非实时端到端业务:可以用1)的方法实现; 因为对消息的延迟可以容忍,故业务服务器之间可以不直接通信,由消息队列(Zeromq/nanomsg,messagemq等)来处理所有的消息

3)非端到端业务:譬如网站,业务服务器之间不需要任何通信;当前这种业务流行的提供REST接口供APP直接调用

2.3 数据库服务器 

1) SQL

2) Nosql: CAP定理把Nosql分成几种类型,按照各自需要选择

  • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
  • 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
  • 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

3) 实时数据库: RethinkDB

2.4 缓存服务器: 业务服务器和数据库服务器前面可以增加缓存服务器来提高性能: Redis/Memcache, Nginx

2.5大数据分析服务器: 用户的行为数据需要分析,当数据量很大时候就需要大数据的架构了,这种服务器属于公司内部的业务,对很多公司不是必需的。下面的链接是我看到

对大数据的来龙去脉说的比较生动的,适合针对小白普及概念,互联网的技术日新月异需要不段跟踪新技术

http://www.zhihu.com/question/27974418

二:自己开发客户端UI, 二次开发带客户端API的服务器

1:客户端(APP)

1.1  和服务器通信:

1)基于封装好的Socket通信: 譬如ZeroMq, 上层的协议需要自己设计

2)使用基于Socket(或者Websocket)的协议:XMPP/SIP或者MQTT

3)使用服务器提供的RESTFUL接口

2: 服务器集群

2.1 负载均衡:采用商用的云服务

Web业务有些现成的框架可以选择Php: drupal JS: Express等, 有的框架集成了OAUTH省却了复杂的用户鉴权

其它业务取决于技术的选型

2.2业务服务器集群和数据库服务器集群

1) 二者集成:

Web业务有些现成的框架可以选择Php: drupal JS: Express等, 有的框架集成了OAUTH省却了复杂的用户鉴权;其它业务取决于技术的选型

2)二者分开: 数据库服务器集群采用商用的云服务

2.3缓存服务器:采用商用的云服务

三:用统一的API开发客户端和服务器端

到现在为止,有的用户觉得开发APP还是比较麻烦,幻想着在一台机器上写的代码可以同时用在客户端和服务器端, 不需要考虑二者之间的接口; 

有可能吗?当然了,如果你的业务对性能要求不太高(可以用JS开发),用Meteor吧,它为此而生。

以上介绍的都是些概念性质的东西,也都是开源的产品, 仅仅是初级的入门篇。接下来会写一些更详细的: 客户端的技术选型, 服务器集群的技术选型, Nosql的技术选型等等

时间: 2024-10-12 20:12:59

务虚的全栈式开发的相关文章

基于NodeJS的全栈式开发

随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本.为了提升开发效率,前后端分离的需求越来越被重视,后端负责业务/数据接口,前端负责展现/交互逻辑,同一份数据接口,我们可以定制开发多个版本. 这个话题最近被讨论得比较多,阿里有些BU也在进行一些尝试.讨论了很久之后,我们团队决定探索一套基于NodeJS的前后端分离方案,过程中有一些不断变化的认识以及思考,记录在这里,也希望看到的同学参

也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)

随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本.为了提升开发效率,前后端分离的需求越来越被重视,后端负责业务/数据接口,前端负责展现/交互逻辑,同一份数据接口,我们可以定制开发多个版本. 这个话题最近被讨论得比较多,阿里有些BU也在进行一些尝试.讨论了很久之后,我们团队决定探索一套基于NodeJS的前后端分离方案,过程中有一些不断变化的认识以及思考,记录在这里,也希望看到的同学参

基于NodeJS的全栈式开发(基于NodeJS的前后端分离)

也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离) 前言 为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异.痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的NodeJS,试图探索一条全新的前后端分离模式. 随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本.为了提升开发效率,前后端分离的需求越

今天烦死了,各种技术,各种问题,全栈式多屏工程师不好做啊

感言:全栈式多屏工程师不好做啊 今天,是最近写代码最烦的一天啊,遇到各种问题. 1.公司项目,发短信不成功.    其中一个平台的短信发送不成功,这个真不能怪我.   一是由于,HTTP短信接口的API地址不对,404.   而是由于,WebService接口,没有SDK包,只有SDK的文档. 2.表格组件grid有问题.   无论怎么尝试,分页总是失败.   秒针原来某个同事写的grid组件,用的比较多,但是2.0和3.0有很大变化.   参数的格式在变化,接受参数的方式也在变化,Spring

CRUD全栈式编程概述

业务场景 CRUD,从数据驱动的角度几乎所有的的业务都是在做这样的事情.  几乎所有的操作都是在做对表的增删该查.  假设我们将数据库数据规个类:  分为基础/配置数据和业务/增长数据,或者说静态数据和动态数据.  其中静态数据是由后台管理员编辑的产生,动态数据是由客户产生.  那么这部分中的静态数据往往伴随着完整的增删改查逻辑.  完整的增删改查逻辑指的是,有对数据库某个表数据的查询.  一条或者几条数据的添加,删除,修改.  再直白一点就是有个界面,上面有查询,添加,删除,修改,导入,导出的

如何学习(1):构建全栈式知识结构

有次下班到家楼下等电梯,碰巧一位妈妈抱到两岁的小女孩在看旁边的宣传画.这时电梯还没到,这位妈妈就指着海报上的字读给小女孩,"这是太阳,那是月亮"--,想借这个机会教小孩认字. 这是中国式的.传统的教学方法,其实我对这种死记硬背的方法不怀好意,于是在电梯上开起了小差,为什么这种方法效果不好,不招受教者的讨好呢. 如果我是教自己的小女儿认字,我会怎么教呢? "牛牛,你看,上面画的是太阳.你知道吗?太阳公公每天很早就起床了,大地才开始暖起来,小朋友们才可以出来玩耍.到了晚上,太阳公

数据层全栈式编程架构

CRUD全栈式编程架构之数据层的设计 CodeFirst 一直以来我们写应用的时候首先都是创建数据库 终于在orm支持codefirst之后,我们可以先建模. 通过模型去创建数据库,并且基于codefirst可以实现方便的 实现数据库迁移的工作.使用codefirst有以下几个技巧, 以EntityFramework为例,结合我这个设计做了以下改进 1.模型的识别 建立一个基类命名Entity,里面只有一个long类型的id字段. 所有需要映射到数据库的模型都继承自Entity, + 2.模型的

基于NodeJS+Express+mongoDB+Bootstrap的全栈式工程化开发前后端分离博客系统实战

课程目标本课程通过一个完整的项目,让学员了解如何使用Jade+Node.js+Express+mongoDB+Bower+Gulp+Yeoman的组合开发Web应用.可以让学员更深入地掌握Node.js和Express技术. 适用人群node.js程序员,express程序员,JAVAscript程序员 课程简介本系统是一款博客系统,拥有博客必要的功能,如用户注册.用户登录.用户退出.文章列表,文章查看.添加文章,删除文章,修改文章.文章搜索.后台权限控制等. -----------------

为 DevOps 提供专业级、全栈式性能监控服务

相信大家都清楚,深谙 DevOps 的公司做起事情来更加高效.相较于竞争对手而言,他们的代码重用率更高,错误率更低.但是,成功取决于多种因素,其中就包括:是否能够准确监控应用在不同环境下(可能是多语言环境)的所有变化.所以,运维团队还需要一个支持连续开发与测试的软件分析方案,同时加强与其他部门的协作.沟通. 国内应用性能管理领军企业 OneAPM 提供的数据既能检测和监控开发团队提交的新性能,也能确保运维的稳定性.作为一家 DevOps 为导向的公司,OneAPM 完全理解软件团队所面临的诸多挑