分布式架构设计笔记

主流架构模型-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 中

  1. 当用户点击网站页面上的内容URL,通过本地DNS 系统解析,DNS系统会最终将域名的解析权交给CNAME 指向的CDN 专用DNS 服务器。
  2. CDN 的DNS 服务器将CDN 的全局负载均衡设备IP 地址返回用户。
  3. 用户向CDN 的全局负载均衡设备发起内容URL 访问请求。
  4. CDN全局负载均衡设备根据用户IP 地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
  5. 区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,
  6. 区域负载均衡设备把服务器的IP 地址返回给用户用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。

什么状况下用CDN组件化

  • 最适合的是那些不会常常变化的内容,
    • 好比图片,JS 文件,CSS 文件,图片文件包括程序模板中的,CSS 文件中用到的背景图片,
    • 还有就是做为网站内容组成部分的那些图片,均可以;
  • 灰度发布
    • 也就是会对新应用进行分批发布,逐步扩大新应用在整个及群众的比例直到最后所有完成。
    • 灰度发布是针对新引用在用户体验方面彻底无感知。
  • 灰度发布系统的做用在于,
    • 能够根据本身的配置,来将用户的流量导到新上线的系统上,来快速验证新的功能修改,
    • 而一旦出问题,也能够立刻的恢复,简单的说,就是一套A/BTest 系统.

相关文章
相关标签/搜索