系统架构演化历程-初始阶段架构

  

初始阶段的小型系统 应用程序数据库文件等所有的资源都在一台服务器上通俗称为LAMP(linux、apache、mysql、php)。

特征

应用程序、数据库、文件等所有的资源都在一台服务器上。

描述

通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。

系统架构演化历程-应用服务和数据服务分离

  

好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver。

特征

应用程序、数据库、文件分别部署在独立的资源上。

描述

数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。

系统架构演化历程-使用缓存改善性能

  

特征

数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力。

描述
系统访问特点遵循二八定律,即80%的业务访问集中在20%的数据上。
缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况。

系统架构演化历程-使用应用服务器集群

  

这里的应用服务器集群是说: 多个应用服务器做的是同样的事情,目的是负载均衡。为什么要负载均衡呢? 比如一台应用服务器提供服务,那么用户访问量很大的时候,肯定响应不过来,所以,我们可以让用户访问不同的服务器,但是提供的时同样的功能,这也是集群的特点。

在做完分库分表这些工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了,突然有一天,发现系统的访问又开始有变慢的趋势了,这个时候首先查看数据库,压力一切正常,之后查看webserver,发现apache阻塞了很多的请求,而应用服务器对每个请求也是比较快的,看来 是请求数太高导致需要排队等待,响应速度变慢。
特征
多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。
描述

使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,提升系统的并发处理能力,使得服务器的负载压力不再成为整个系统的瓶颈

系统架构演化历程-数据库读写分离

 

享受了一段时间的系统访问量高速增长的幸福后,发现系统又开始变慢了,这次又是什么状况呢,经过查找,发现数据库写入、更新的这些操作的部分数据库连接的资源竞争非常激烈,导致了系统变慢。

特征

 多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。

描述

  使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,使得服务器的负载压力不在成为整个系统的瓶颈。

系统架构演化历程-反向代理和CDN加速

  

特征

采用CDN和反向代理加快系统的 访问速度。

描述

为了应付复杂的网络环境和不同地区用户的访问,通过CDN和反向代理加快用户访问的速度,同时减轻后端服务器的负载压力。CDN与反向代理的基本原理都是缓存。

那么什么是正向代理,什么是反向代理呢? 这篇文章讲的很好。

即我们FQ的时候,需要通过正向代理服务器请求一个国外的服务器,它来帮助我们请求,而服务器不知道真正的请求者是谁。 即正向代理的对象是用户,我们是用户,所以为正。

而比如我们打10086的时候,不同地区会有不同地区的人来回答,那么我们是无法知道真正提供服务的服务器是哪个。 即反向代理的对象是服务器, 我们是用户,而服务器是对方,反方,所以是反。

那么为什么要做反向代理呢

因为在计算机的世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成千上万的用户请求,这些服务器提供相同的服务,对于用户来说,根本感觉不到任何差别。 且反向代理都是为了实现负载均衡的。

所以在上图中,基本的步骤就是:用户访问的时CDN服务器,然后访问方向代理服务器,接着反向代理服务器通过负载均衡给用户提供空闲的服务器提供服务,这样来减小压力。

系统架构演化历程-分布式文件系统和分布式数据库

  

随着系统的不断运行,数据量开始大幅度增长,这个时候发现分库后查询仍然会有些慢,于是按照分库的思想开始做分表的工作。

特征

数据库采用分布式数据库,文件系统采用分布式文件系统。

描述

任何强大的单一服务器都满足不了大型系统持续增长的业务需求,数据库读写分离随着业务的发展最终也将无法满足需求,需要使用分布式数据库及分布式文件系统来支撑。
分布式数据库是系统数据库拆分的最后方法,只有在单表数据规模非常庞大的时候才使用,更常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理服务器上。
之所以说他们是分布式,而不是集群,是因为分布式完成的时不同的任务,而集群完成的时同样的任务。 比如数据库,包括分布式数据库服务器1/2/3甚至n个,我们可以把操作用户的数据放在数据库1中,把操作文章的数据放在数据库2中等等。这就是分布式了。 

系统架构演化历程-使用NoSQL和搜索引擎

 

特征 : 

系统引入了NoSQL数据库以及搜索引擎。

描述

随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,系统需要采用一些非关系型数据库如NoSQL和分数据库查询技术如搜索引擎。应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。

系统架构演化历程-业务拆分

特征

系统上按照业务进行拆分改造,应用服务器按照业务区分进行分别部署。

描述

为了应对日益复杂的业务场景,通常使用分而治之的手段将整个系统业务分成不同的产品线,应用之间通过超链接建立关系,也可以通过消息队列进行数据分发,当然更多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。

纵向拆分

将一个大应用拆分为多个小应用,如果新业务较为独立,那么就直接将其设计部署为一个独立的Web应用系统。 纵向拆分相对较为简单,通过梳理业务,将较少相关的业务剥离即可。

横向拆分

将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务

横向拆分需要识别可复用的业务,设计服务接口,规范服务依赖关系。

  

系统架构演化历程-分布式服务

特征

公共的应用模块被提取出来,部署在分布式服务器上供应用服务器调用。

描述

随着业务越拆越小,应用系统整体复杂程度呈指数级上升,由于所有应用要和所有数据库系统连接,最终导致数据库连接资源不足,拒绝服务。

Q:分布式服务应用会面临哪些问题?

A:
(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。
(2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
(3) 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
(4) 服务多了,沟通成本也开始上升,调某个服务失败该找谁?服务的参数都有什么约定? 
(5) 一个服务有多个业务消费者,如何确保服务质量?
(6) 随着服务的不停升级,总有些意想不到的事发生,比如cache写错了导致内存溢出,故障不可避免,每次核心服务一挂,影响一大片,人心慌慌,如何控制故障的影响面?服务是否可以功能降级?或者资源劣化?

Java分布式应用技术基础

  

分布式服务下的关键技术:消息队列架构

消息对列通过消息对象分解系统耦合性,不同子系统处理同一个消息

分布式服务下的关键技术:消息队列原理

  

分布式服务下的关键技术:服务框架架构

Q:Dubbo到底是神马?

转载于:https://www.cnblogs.com/cosyer/p/7517414.html

分布式服务下的关键技术(转)相关推荐

  1. 云计算环境下安全关键技术研究

    摘 要 云计算已发展成为大数据应用.跨平台应用的主要解决方案,而虚拟化.大规模.开放性等特征,带来了更多安全威胁和挑战,通过分析云计算安全防御模型架构,分别对云计算安全的技术特征.运行特征.保障模式等 ...

  2. 分布式视频会议系统的关键技术及实现

    引言 在目前已成为计算机领域热点的群组协作计算工具中,视频会议系统是其中的一个重要组成部分.电路交换网络中的视频会议系统已有较成熟的模型,如ITU的H.320标准等,但分组交换网(包括Ethernet ...

  3. 光伏并网pscad_分布式光伏电站逆变器关键技术探讨古瑞瓦特

    欢迎加入技术交流QQ群(2000人):电力电子技术与新能源 905723370 高可靠新能源行业顶尖自媒体 在这里有电力电子.新能源干货.行业发展趋势分析.最新产品介绍.众多技术达人与您分享经验,欢迎 ...

  4. AI TALK | 云原生时代的微服务架构与关键技术

    随着云原生与微服务技术的逐步发展,业界也逐步构建出一整套比较完整的微服务技术体系. 面向云原生时代,微服务架构是从业人员绕不开的一个话题,腾讯云AI&腾讯优图的内容风控安全审核能力也与微服务技 ...

  5. 分布式服务下,消息中间件改造

    一.背景简介 在系统开发初期,很容易出现这样一种情况:不同业务线上开发人员,因为技术栈和版本时间的影响,在选型的时候会优先使用自己熟悉的,例如MQ中间件常用的:Kafka.Rocket.Rabbit等 ...

  6. 分布式架构下常见序列化技术-了解序列化的发展

    随着分布式架构.微服务架构的普及.服务与服务之间的通信成了最基本的需求.这个时候,我们不仅需要考虑通信的性能,也需要考虑到语言多元化问题 所以,对于序列化来说,如何去提升序列化性能以及解决跨语言问题, ...

  7. 分布式服务架构下的混沌工程实践

    本文来自阿里巴巴高可用架构团队高级开发工程师肖长军(花名穹谷)在 GIAC(全球互联网架构大会)上的分享,包含三部分内容:(阿里巴巴中间件公众号对话框发送"混沌工程",获取分享PP ...

  8. 服务机器人关键技术分析

    前言   回顾2014年刚进入服务机器人行业,我们公司接的第一个订单是10台送餐机器人,那时候我和搭档都是刚刚研究生毕业,我们以伙伴公司的名义招了一位嵌入式工程师和一位机械结构设计工程师.无知者无畏, ...

  9. 一文理解分布式服务架构下的混沌工程实践(含PPT)

    导读:近日,在 GIAC(全球互联网架构大会)上,来自阿里巴巴高可用架构团队的高级开发工程师肖长军(花名穹谷)做了<分布式服务架构下的混沌工程实践>主题分享.本次分享包含三部分,第一部分从 ...

最新文章

  1. 逆向工程 sql_mybatis逆向生成工具,真的很好用!
  2. Codeforces 920D Tanks (看题解)
  3. 的注册表怎么才能删干净_洗鞋怎么清洗才能清洗干净?洗鞋店洗鞋怎么清洗的这么干净? 篇幅一...
  4. boost::foreach模块非常量右值的测试程序
  5. RxSwift之UI控件Label扩展的使用
  6. java调用kettle批量执行
  7. 延期毕业,只因实验用的鱼被野猫偷吃了………
  8. php里 \r\n换行问题
  9. weak和assign的区别
  10. uV胶点胶机器人_解析手机用粘合剂十大用胶点
  11. 基于SSM的医学健康网站
  12. FreeSwitch之拨号计划~简单例子(二)
  13. 5教程 watchout_WATCHOUT大屏拼接融合系统
  14. Golang的反射机制(The Laws of Reflection)
  15. 极简桌面 android 2.3,低端 Android 备机的轻量级启动器:极简光速桌面
  16. 混拨vps与单城市拨号vps有什么区别?
  17. matlab在频率特性法中的应用实验目的,matlab软件实习报告
  18. U 需要知道的反射知识 -- 大白话
  19. 你的公司怎么样激励员工?
  20. NODE.JS事件处理

热门文章

  1. Docker-compose 安装与基本使用(四)
  2. Ubuntu18.04如何让桌面软件默认root权限运行?
  3. RabbitMQ系列(二)深入了解RabbitMQ工作原理及简单使用
  4. shell学习笔记--自我总结
  5. MySQL中的日志类型(二)-General query log
  6. Shell 快速指南
  7. 解决git提交问题error: The requested URL returned error: 403 Forbidden while accessing
  8. 分享Web应用运行的细节问题:预编译提高网站性能、跟踪用户习惯和解决线程同步...
  9. $(#id).val()取值textarea是
  10. OpenJudge/Poj 1226 Substrings