分布式架构设计笔记
主流架构模型-SOA 架构和微服务架构
SOA 所解决的核心问题
- 系统集成
- 站在系统的角度,解决企业系统间的通信问题,把原先散乱、无规划的系统间的网状结构,梳理成规整、可治理的系统间星形结构,这一步往往需要引入一些产品,比如ESB、以及技术规范、服务管理规范;
- 这一步解决的核心问题是【有序】
- 系统的服务化
- 站在功能的角度,把业务逻辑抽象成可复用、可组装的服务,通过服务的编排实现业务的快速再生,
- 目的:把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用;
- 这一步解决的核心问题是【复用】
- 业务的服务化
- 站在企业的角度,把企业职能抽象成可复用、可组装的服务;
- 把原先职能化的企业架构转变为服务化的企业架构,进一步提升企业的对外服务能力;
- “前面两步都是从技术层面来解决系统调用、系统功能复用的问题”。
- 第三步,则是以业务驱动把一个业务单元封装成一项服务。
- 这一步解决的核心问题是【高效】
微服务架构
- 微服务架构其实和SOA 架构类似,微服务是在SOA 上做的升华,
- 微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,
- 原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。
- 这些小应用之间通过服务完成交互和集成。
- 组件表示一个可以独立更换和升级的单元,就像PC 中的CPU、内存、显卡、硬盘一样,独立且可以更换升级而不影响其他单元。
- 如果我们把PC 作为组件以服务的方式构建,那么这台PC 只需要维护主板和一些必要的外部设备。
- CPU、内存、硬盘都是以组件方式提供服务,PC 需要调用CPU 做计算处理,只需要知道CPU 这个组件的地址即可。
微服务的特征
- 通过服务实现组件化
- 按业务能力来划分服务和开发团队
- 去中心化
- 基础设施自动化(devops、自动化部署)
SOA 和微服务架构的差别
- 微服务不再强调传统SOA 架构里面比较重的ESB 企业服务总线,同时SOA 的思想进入到单个业务系统内部实现真正的组件化。
- Docker 容器技术的出现,为微服务提供了更便利的条件,比如更小的部署单元,每个服务可以通过类似Node或者Spring Boot 等技术跑在自己的进程中。
- SOA 注重的是系统集成方面,而微服务关注的是完全分离
领域驱动设计的概念
- 领域驱动设计(DDD,Domain-Driven Design)
- 在开发前,通常需要进行大量的业务知识梳理,然后才到软件设计的层面,最后才是开发。
- 在业务知识梳理的过程中,我们必然会形成某个领域知识,根据领域知识来一步步驱动软件设计,就是领域驱动设计的基本概念。
为什么需要DDD?
- 业务初期,功能大都非常简单,普通的CRUD 就能满足,此时系统是清晰的。
- 随着产品不断迭代和演化,业务逻辑变得越来越复杂,我们的系统也越来越冗杂。
- 各个模块之间彼此关联,甚至到后期连作者都很难说清模块的具体功能意图是啥。
- 导致在修改一个功能时,要追溯到这个功能需要的修改点就需要很长时间,更别提修改带来的不可预知的影响面。
- 绝大部分公司都是这样一个状态,然后一般的解决方案是不断的重构系统,让系统的设计随着业务成长也进行不断的演进。
分布式一致性问题
- 是指在分布式环境中引入数据复制机制之后,不同数据节点之间 可能出现的,并无法依靠计算机应用程序自身解决的数据不一致的情况。
什么是分布式架构下的高可用设计
- 避免单点故障
- 负载均衡技术(failover/选址/硬件负载/软件负载/ 去中心化的软件负载( gossip(rediscluster)))
- 热备(linux HA)
- 多机房(同城灾备、异地灾备)
- 应用的高可用性
- 故障监控(系统监控(cpu、内存)/链路监控/日志监控) 自动预警。
- 应用的容错设计、(服务降级、限流)自我保护能力
- 数据量(数据分片、读写分离)
- 分布式架构下的可伸缩设计
- 垂直伸缩 提升硬件能力
- 水平伸缩 增加服务器
- 加速静态内容访问速度的CDN
- CDN 是Content Delivery Network 的缩写,表示的是内容分发网络。
- CDN 的作用是把用户需要的内容分发到离用户最近的地方,这样可以是用户能够快速获取所需要的内容。
-
CDN 其实就是一种网络缓存技术,能够把一些相对稳定的资源放到距离最终用户较近的地方,
- 一方面可以节省整个广域网的带宽消耗,
- 另外一方面可以提升用户的访问速度,改进用户体验。
- 我们一般会把静态的文件(图片、脚本、静态页面)放到CDN 中
- 当用户点击网站页面上的内容URL,经过本地DNS 系统解析,DNS系统会最终将域名的解析权交给CNAME 指向的CDN 专用DNS 服务器。
- CDN 的DNS 服务器将CDN 的全局负载均衡设备IP 地址返回用户。
- 用户向CDN 的全局负载均衡设备发起内容URL 访问请求。
- CDN全局负载均衡设备根据用户IP 地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
- 区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,
- 区域负载均衡设备把服务器的IP 地址返回给用户用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。
什么情况下用CDN
- 最适合的是那些不会经常变化的内容,
- 比如图片,JS 文件,CSS 文件,图片文件包括程序模板中的,CSS 文件中用到的背景图片,
- 还有就是作为网站内容组成部分的那些图片,都可以;
- 灰度发布
- 也就是会对新应用进行分批发布,逐步扩大新应用在整个及群众的比例直到最后全部完成。
- 灰度发布是针对新引用在用户体验方面完全无感知。
- 灰度发布系统的作用在于,
- 可以根据自己的配置,来将用户的流量导到新上线的系统上,来快速验证新的功能修改,
- 而一旦出问题,也可以马上的恢复,简单的说,就是一套A/BTest 系统.
转载于:https://my.oschina.net/u/3847203/blog/2872567