什么是微服务?
- 一些协同工作的小而自治的服务,可以独立部署。
- 服务之间均通过网络调用进行通信,从而增强服务之间的隔离型,避免紧耦合。
- 服务间应该可以彼此间独立进行修改,某个服务部署不该引起该服务消费方的变动。重点应该考虑什么应该暴露?什么应该隐藏?暴露多少合适?
- 服务会暴露API(Application Programming Interface,应用编程接口)以供彼此间通信和供给外部调用。
好处
- 异构架构,每个服务根据业务使用不同架构
- 可扩展性强,单体应用只能作为整体扩展,微服务针对性扩展
- 简化部署,看起来部署复杂,实则简化,大型应用尤其优势明显
- 适配组织,避免过大代码库,高效团队
- 可组合性强,分解多个服务以达到可重用,可组合母的
- 灵活性强,重构服务相对阻碍性小
缺点
- 部署测试监控等方面做很多工作
- 事务难以控制
- 彼此调用频繁,网络延迟增加
- 通信协议的选择,服务粒度确定,划分服务指导性原则等模糊
没有银弹,在于利弊权衡
什么是好服务?
松耦合
- 修改一个服务就不需要修改另一个服务;能够独立修改及部署单个服务而不需要修改系统的其他部分
- 紧耦合?一个服务修改,其消费者也必须修改
- 尽量减少服务间的不同形式的调用,一方面有性能问题,另一方面过度通信会导致紧耦合
高内聚
- 相关行为聚集在一起,不相关放在别处
- 改变行为,尽量少的修改服务数,尽快发布,服务数量越少风险越低