当你想开发一款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的技术选型等等