微服务简介
1.软件架构的进化
- 什么是软件架构:有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。是在软件内容,经过综合各种因素的考量,权衡,选择特定的技术,将系统划分成不同部分,并使用这些部分相互分工,彼此协作,为用户提供需要的价值。
- 相关因素:业务需求,技术栈,成本,组织架构,可扩展性,可维护性。
- javaweb的进化之路:一层架构,MVC(ssh,ssm),dubbo
- 单体架构:功能,业务集中在一个发布包里,部署运行在同一个进程中。优势(易于开发,易于测试,易于部署,易于水平伸缩),劣势(代码膨胀,难以维护,构建成本大,持续交付周期长,新人上周周期长,创新困难,可扩展性差)
2.什么是微服务
- 使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且他们可以通过自动化方式部署。
- 如何拆分最小服务单元(不是固定的量化,是一种设计思路)
- 微服务特征:单一职责,轻量级通讯,隔离性,业务数据独立,技术多样性。
- 微服务诞生背景:互联网的快速发展,敏捷开发,精益方法,容器技术的成熟。
3.微服务架构图
- 业务场景:登录注册,发送邮件或者短信,获取课程列表
- 单体架构图:
-
微服务架构图:
4.微服务架构优势,劣势
- 优势:独立性,敏捷性,技术栈灵活,高效团队。
- 劣势:额外的工作,数据一致性,沟通成本。
5.微服务间如何通讯
- 通讯模式:
- 通讯协议:REST API,RPC(IO/线程调用模型,序列化方式,多语言支持,服务治理(dubbo,dubbox,thrift,motan,grpc)),MQ
- 流行的RPC框架对比
-
6.微服务发现
- 传统服务“发现”
- 微服务发现(客户端发现)
- 微服务发现(服务器端发现)
7.微服务部署,更新,扩容
-
服务编排:mesos,docker swarm,kubernetes