分布式架构设计笔记
主流架构模型-SOA 架构和微服务架构linux

SOA 所解决的核心问题redis
- 系统集成
- 站在系统的角度,解决企业系统间的通讯问题,把原先散乱、无规划的系统间的网状结构,梳理成规整、可治理的系统间星形结构,这一步每每须要引入一些产品,好比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 系统.

欢迎关注本站公众号,获取更多信息