未来的应用, 会更多的考虑移动设备, 因此, 架构以及相关技术或者是业务, 都会围绕移动领域展开。因此技术规划的总线路是移动应用方向。
1. 架构积累方向OSGI Cloud Server –Open API Client, 采用HTTP协议.
a) Server端架构 定型为以OSGI为核心的可插拔的Cloud Server方案. 成为OSGi方向的专家, 有能力设计出运作良好的大型OSGI分布式框架系统。Server端和Client端不关心Client用什么系统, 采用什么语言, Client端和Server端是彻底解耦合的。
b) Client架构 以HTTP协议为基础, 以Json作为C-S交互的主流模式, 尽量采用封装好的OPEN-API以支持多个终端平台。
2. 技术要素积累方向
a) 数据库技术
b) Java与C的交互技术
c) HTTP 通信协议
d) OSGI知识
e) Android OS相关技术
3. 业务积累方向
a) 工作中心: 机械工程行业中物联网相关方向
b) 业余工作兴趣: 关注教育教学行业
技术规划分为三点的理由比较充分:
1. 框架作为首选项, 原因自然也很简单, 很多软件运作一段时间, 最后运维人员神经崩溃, 开发人员吐血身亡的事情屡见不鲜。作为一个做过二次开发, 接手过第二个版本开发(很少有第三个版本), 也运维过一些系统的开发人员。 一个不错的idea是: 如果你恨一个人, 让他去做第二个版本的开发吧!
2. 技术当然必不可少. 这里涉及到的是基本上所有软件系统能搞定的技术, 需要的技术, 并非那些世外高人的奇技淫巧。技术靠的是累积, 厚积而薄发。今天恰好是四年工作的纪念日(2007-710~2011-7-10). 所幸, 自己四年的时间, 都没有偏离这些基本技术。
3. 很抱歉, 再一次把业务放在最后边, 我知道这个是个错误。 但这次我会重视它。实际上这个才是重中之重。
该方向有如下优势:
1. Server端热插拔. 解耦合
2. 大部分的接入是通过移动端的接入, 鉴于手持端的特点, 不适合做计算量大的功能, 尽量将复杂的逻辑处理放置云端, 有利于节省手持设备的电量, 避免终端发热。因此计算保留在Server, 展示保留在Client.
3. 手持终端操作尽量要求简洁, 因此界面设计需要紧凑,从而不适合富客户端方式的架构设计,手持终端尽量降低复杂性。因此Client只做与平台相关的展示功能。
4. 每增加一个服务, 在原有的系统上要进行改动。 为了易维护(即改动最小), 客户端和服务器端尽量保持一方不需要改动(或者基本不改动),鉴于服务端的改动是必不可少的,因此,客户端简洁化,将有利于项目的持续维护。。
5. 客户端需要跨平台,但服务器端不需要跨平台,因此将维护和扩展工作放置在服务端,代价可以最小化。
6. 目前已经存在的优秀实践, 表明云端的架构对项目的后期发展更有利。目前大量的门户网站, SNS网站, 专有服务网站都提供类似“云端 + open API”的方式 , 典型代表有
a) Google 系列: 如搜索引擎, Google 地图
b) SNS系列: Facebook, Twitter, 豆瓣
c) 门户网站系列: 新浪微博, 淘宝
7. 系统发布出去后, 维护众多的客户端, 不如只维护服务端, 这样代价最小, 因此这样的方案。非常适合移动应用。
由于考虑的都是移动应用, 为了应对万变的终端接入方案(PC接入, 手机接入, 家用电子设备接入), Server端要足够灵活, 足够强大, 这就带来了一个问题: 足够复杂。 复杂性的管理, 无外乎细化, 细化的方式很多, 但对系统而言, 最需要做到的是:
1. 可插拔, 有插有拔, 才称之爽。某些交合的时候,拔不出来的案例, 实在是伤不起。
2. 重用性。为什么要做重复的工作, 我们需要更强大的开发效率。 重用性能带来的更大收益是稳定。Unix文化就是不遗余力的使用现有工具,于是不断稳定过来的。
3. 协同开发。各自开发一部分。 干扰性非常小。
4. 维护的需要, 出了问题, 不需要全世界找代码。
这个叫做OSGI的插件框架系统, 帮我们做到了。 初次使用它的时候, 仅仅需要一个1M大小的包, 对我来说,吸引力比较大。继而迷上了它。 现在准备不断进一步的学习它。
比较欠缺的地方, 分布式方面的知识。 而这点, 又是极其重要的。 开始准备吧!
鉴于目前的众多优秀实践, 采用的都是以Json的方式进行服务端交互, 因此, 我们这里也不例外, Json相比于XML更加直观. 数据更简洁。 相比于二进制数据流, 更方便阅读和解析。 为了节约一丁点的流量, 采用二进制传输的方式, 是不值得推荐的。很多年前我们用机器语言进行编译, 原因是硬件效率受限, 3G时代已经到来, 为了节省几个byte的流量, 牺牲软件的可读性。同样也是不值得的。
需要专注的技术方向, 掌握这些, 项目就可以正常的实施起来了。
了解数据库的基本使用, 就已经OK. 数据表大部分都是线性结构, 具体的应用而言, 这个比较弱, 因此要更多的了解表之间的交互
有效率需求的情况, 需要考虑用C来解决, 这些应用有:
1. 图像处理
2. 文本分析
3. 数据索引
不管是互联网, 还是移动互联网, 貌似这个协议都无法避免的。 这个协议的NB之处, 在于它能为每个连接保持Session, 所以, 抛弃裸的Socket, 代表更小的复杂性。
毋庸置疑, 框架需要的技术
1. Market 运营策略
2. Android OS是不错架构, 尤其是UI这个层面, 各个UI的管理和通信, 都非常不错。 值得深入学习。