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

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

  

 

初始阶段的小型系统 应用程序数据库文件等所有的资源都在一台服务器上通俗称为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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS实验教程——实验九:矢量数据提取

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 【实验描述】本实验以矢量数据为实验数据,讲解矢量数据的提取方法及注意事项。 一、实验内容 1、直接选取,导出(所有要素) 2、导出视图范围中的所有要素 3、按指定的裁剪框裁剪数据 4、按指…

linux之sort命令

1 sort命令的参数 sort 参数(可以省略) file 具体参数如下 -b:忽略每行前面开始的空格字符,空格数量不固定时,该选项几乎是必须要使用的("-n"选项隐含该选项,测试发现都隐含) -c:检查文件是否已经按照顺序排序,如未排序,会提示从哪一行开始乱序 -C:类似于&q…

php基础教程 第七步数组补充及循环基础

键值对 上一节中简单的了解了数组的定义、取值及存储,这一节补充一下上一节数组的内容。 在上一节中,我们知道索引是用来标记值的位置,通过索引可以取得当前位置的值。这种一个索引对应着一个值的关系是一个映射关系,称为键值对。…

vs2013 c# 中调用 c 编写的dll出错的可能错误

先说出错原因: 堆栈调用顺序 解决办法: 使用 __stdcall 或 使用C#属性 CallingConvention 起因是我想在c#中调用c函数结果出错了 如下 C 头文件 #define DLLExport extern "C" __declspec(dllexport)DLLExport int func(int a, int b);DLLExport void init…

jemter在linux上怎么安装_办公便签软件怎么下载?怎么在电脑桌面上下载安装一款办公便签软件...

走进一间办公室的话,你会看到很多人都在电脑前辛勤地忙碌。确实,随着互联网技术的应用和普及,现在很多上班族都离不开电脑,甚至需要终日在电脑前伏案办公。也正是因为这样,很多人都想在电脑上下载安装一款办公便签软件…

C#布隆过滤器的实现

介绍布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率…

MySQL服务安装

2019独角兽企业重金招聘Python工程师标准>>> 这里是5.7版本以上解压版的安装攻略~~~~~ 1.下载MySQL server https://dev.mysql.com/downloads/mysql/ 根据自己需要下载 2.解压放到指定文件夹。例如: C:\Program Files\MySQL 3.配置环境变量,在path中放入…

ArcGIS实验教程——实验十:矢量数据投影变换

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 一、实验描述 投影变换是指将一种地图投影转换为另一种地图投影,主要包括投影类型、投影参数和椭球体参数等的改变。 二、实验内容 (一)工具箱实现 ArcGIS中,矢量数据的投影变化工具位于:工…

vi 编辑器跳转到指定行数

如:跳转到25行 :set number :23转载于:https://www.cnblogs.com/yihujiu/p/5451948.html

linux之uniq命令

1 uniq命令参数 uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用,可检查文本文件中重复出现的行列 uniq 参数(可以忽略) file 参数如下 -c或--count 在每列旁边显示该行重复出现的次数。 -d或--repeated 仅显示重复出现的行列。 -f<栏位&g…

php基础教程 第八步循环补充

其它循环 上一节内容中&#xff0c;讲解了php中的循环&#xff0c;并且了解了for循环。for循环是php循环中的一种&#xff0c;在本节中继续讲解php循环&#xff1a;While循环、do…while循环、foreach 循环。 While循环 While循环和for循环类似&#xff0c;但是在它的圆括号…

Java记录 -6- 流程控制语句

Java流程控制语句 &#xff08;Flow Control Statement&#xff09;轻量级的文本编辑器&#xff1a;UltraEdit、Editplus、vi、vim、gvim流程控制语句if的用法为&#xff1a;第一种形式&#xff1a;if(布尔表达式){ //待执行的代码}第二种形式&#xff1a;if(布尔表达式…

Microsoft Graph 的 .NET 6 之旅

这是一篇发布在dotnet 团队博客上由微软Graph首席软件工程师 Joao Paiva 写的文章&#xff0c;原文地址&#xff1a;https://devblogs.microsoft.com/dotnet/microsoft-graph-dotnet-6-journey/。Microsoft Graph 是一个 API 网关&#xff0c;它提供了对 Microsoft 365 生态系统…

小鱼便签_同样是写便签,这样更酷

每天那么多的工作&#xff0c;总喜欢写一些Tips提醒自己。但是如果全部都写在小纸条上&#xff0c;贴在电脑边上&#xff0c;每日身边飞扬着无数小纸条&#xff0c;实在是太讨厌啦&#xff01;这时候&#xff0c;不妨试试一款电脑桌面便签软件——小鱼便签&#xff0c;让你的办…

ArcGIS实验教程——实验十一:影像拼接与提取

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) 【实验描述】本实验讲述在ArcGIS软件中进行日常影像(栅格)数据的拼接与提取(裁剪)的工具与方法。影像的拼接常用到的工具是Mosaic和Mosaic To New Raster;影像提取分为按属性提取、形状或位置提…

5.03 列出表的索引

show index from emp \G;转载于:https://www.cnblogs.com/liang545621/p/7518762.html

c# task

Task Parallel Library: 1 of n http://www.codeproject.com/Articles/152765/Task-Parallel-Library-of-n Task 与Thread&#xff0c; lambda, action,funct之间有什么关联。 Task相比Thread提供了什么方便之处。 Thread 1. 创建费时间&#xff0c;占用内存与CPU的资源 For …

linux之找出两个文件里面相同的数据

1 问题 找出2个文件里面重复的数据&#xff08;这个问题是csdn排名第一的大神stpeace的专栏在微信里面和我的交流&#xff0c;我当时一脸懵逼&#xff09; 文件a.txt文件内容如下 cat a.txt 123 123 234 345 456文件b.txt文件内容如下 cat b.txt 234 345 456 789 789两个文…

LAMP部署脚本--安装篇

#!/bin/bash # By Stranded 2015-08-20CMA_Vcmake-2.8.6 APA_Vhttpd-2.2.15 MYS_Vmysql-5.5.22 LIB_Vlibmcrypt-2.5.8 MHA_Vmhash-0.9.9.9 MCR_Vmcrypt-2.6.8 PHP_Vphp-5.3.28apache(){# 判断是否有RPM方式安装的httpd、httpd-manual软件包&#xff0c;如果有则卸载if [ $(rpm …

php基础教程 第九步 自定义函数

自定义函数 在之前的课程我们有使用到php的系统函数&#xff0c;这些函数由系统定义。在开发中&#xff0c;有时候系统自带的函数满足不了我们开发时&#xff08;或其它情况&#xff09;&#xff0c;我们可以自定义函数。顾名思义&#xff0c;自定义函数就是自己定义函数。 自…