微服务是分布式系统的解决方案,将服务细颗粒化。不同的服务之间协同工作,每个服务都有自己的生命周期。
微服务(什么是微服务?)
微服务就是一些协同工作的小而自治的服务。协同工作和自治很好理解,但代码库多小才算小哪,当你不再感觉代码库"过大",说明它就足够小了。服务越小,微服务架构的优点和缺点就更明显。使用的服务越小,独立性带来的好处就越多,但是管理大量的服务越会越复杂。
- 微服务的好处
- 技术异构性:多个服务之间不会有语言的限制
- 弹性:微服务可以很好地处理服务不可用和功能降级的问题
- 扩展:对活跃服务和不活跃服务进行不同的扩展
- 部署简单:各个服务独立部署,即使处理问题也可以快速定位或回滚
优秀的架构师(架构师应该承担哪些职责?)
我们可以把架构师比作城市规划师,而分服务可以看作城市的分区,服务的边界就可以看作不同区的边界。
- 优秀的架构师应该承担哪些职责
- 远景
- 同理性
- 合作
- 适应性
- 自治性
- 治理
- 业务和技术同样重要
如何建模服务(怎样区分微服务的边界?)
-
什么样的服务是好服务
- 松耦合:可以想想我们通常说的解耦
- 高内聚:把相关的行为聚集在一起,把不相关的行为放在别处
-
区分边界
- 界定上下文
- 区分服务和模块
- 避免过早划分为服务,很多时候,将已有的代码库划分微服务,比从头开始构建微服务要简单得多。
集成(服务之间怎么通信?)
- 理想的集成技术
- 避免破坏性修改
- 保证 API 的技术无关性
- 方便消费方使用
- 隐藏内部实现细节
- 同步通信 or 异步通信
- 协同 or 编排
- RPC or REST
- JSON or XML
- 版本管理
- 第三方服务的集成
分解单块系统(分解单块系统的原因、以及怎样分解)
-
原因
- 改变服务的更新速度
- 优化团队结构
- 信息安全
- 技术、语言的更新更容易
-
怎样分离
- 分离代码
- 分离杂乱的依赖
- 分离数据库
- 分离静态资源(通常情况放在配置文件中解决)
- 分布式事务(尽量避免)
部署(服务怎样部署?)
- 持续集成(Continuous Integration)
- 将持续集成映射到微服务
- 持续交付
- 环境配置区分
- 服务和主机
- 单主机多服务
- 应用程序容器
- 单主机单服务
- 平台即服务(Platform-as-a-Service)
- 自动化部署
- 虚拟机
- vagrant
- Linux 容器
- docker