1-2 软件架构的进化
-
软件架构是在软件的内部,经过综合各种因素的考量、权衡,选择特定的基数,将系统划分为不同的部分并使这些部分相互分工,彼此协作,为用户提供需要的价值。
-
因素:业务需求、技术栈(公司人员会的技术)、成本、组织架构、可扩展性、可维护性。
-
软件架构进化:
- 一层架构
- MVC
- dubbo:前后端分离
-
单体架构(单块架构):功能、业务集中在一个发布包(jar、war),部署运行在同一个进程中。
-
优点:
- 易于开发、测试、部署和水平伸缩(新增节点时直接复制jar包发布到另一台机器上即可)。
-
缺点:
- 代码膨胀,难以维护
- 构建、部署成本大
- 新人上手困难
- 创新困难(想引入新框架但代码太多太难改)
- 可扩展性差
1-3 什么是微服务
-
定义:使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且它们可以通过自动化的方式部署。
-
特征:
- 单一职责:紧密相关的功能放在一个服务里,如,订单和支付一个服务,登录和注册一个服务。
- 轻量级通信:服务之间的通信必须与平台无关,如,http通信(与平台有关的如java的远程机制必须运行在jvm里)。
- 隔离性:每个服务运行在自己的环境中,互不干扰。
- 有自己的数据:每个服务有独立的数据存储系统,降低数据复杂度。
- 技术多样性:每个微服务都可以选择最适合的技术,如,有的是java开发,有的是python开发,只要最后能提供所需的Api即可。
1-4 画出微服务架构
- 经典架构:
- 微服务架构:
1-5 微服务的优势和不足
-
优势:
- 独立性
- 敏捷性:有新需求时很容易找到要在哪个服务里增加。
- 技术栈灵活
- 高效团队:一个服务一个团队,只有几个人,沟通方便快捷。
-
不足:
- 额外的工作:如,微服务的拆分。
- 数据一致性:单体架构中只有一个数据库,很容易用事务和级联来实现数据一致。
- 沟通成本:在单体架构中,如果你想修改一个Api,那么自己把调用的地方也修改了即可,但是在微服务中,很可能这个调用的地方就不是你负责的了,那么就需要联系其他组的人。