• 什么是微服务?
微服务是协同工作的小而自治的服务
1) 协同:服务之间通过进程间通信的方式进行调用,服务之间通过api通信。一个进程会暴露几个api。
2) 很小,专注于做好一件事。一件事:内聚,业务的边界即服务的边界。很小,如何算小?时间两周内能完成更换,能很好地和团队结构相匹配
3) 自治:可以独立地部署在PaaS平台上,也可以作为一个操作系统的进程存在
• 微服务有何好处?
a. 技术异构性:不同的团队可以选择最适合自己的编程语言及数据存储机制
b. 弹性:舱壁,系统里的一个组件不可用了,其它的组件还可以继续工作
c. 扩展:针对需要扩展的微服务进行扩展
d. 简化部署:各个服务的部署是独立的,可以更快地针对特定部分的代码进行部署
e. 与组织结构相匹配:避免出现大的代码库,从而获得理想的团队大小和生产力
f. 可组合性:服务的可重用性
g. 对可替代性的优化:对几百行代码的微服务可以不带任何感情地删除、优化
• 微服务有何要求?
a. 分布式对部署、测试、监控方面的要求
b. 分布式事务
c. CAP相关的问题:分布式数据如何保持一致性
• 微服务与面向服务架构的关系
a. 面向服务的架构要考虑的问题: 通信协议(例如SOAP),第三方中间件如何选择,服务粒度如何划分
b. 微服务式面向服务的架构的一种特定方法
• 其它分解技术
a. 共享库:适用于执行一些公共任务,服务之间可以并且应该使用第三方库来重用
问题:1)无法选择异构的技术(这个不对吧?比如Java的应用可以调用c++写的库)2)失去独立地对系统一部分进行扩展的能力;3) 如果不是动态链接库,每次库更新时,系统都要重新启动或部署;
b. 模块:OSGI(Open Source Gateway Initiative)和Erlang。osgi带来的复杂度远远大于好处。