收藏 分销(赏)

高可用和高并发概念讨论和技术建议.pptx

上传人:精**** 文档编号:12705617 上传时间:2025-11-29 格式:PPTX 页数:51 大小:2.07MB 下载积分:14 金币
下载 相关 举报
高可用和高并发概念讨论和技术建议.pptx_第1页
第1页 / 共51页
高可用和高并发概念讨论和技术建议.pptx_第2页
第2页 / 共51页


点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,个人简介,徐 桥,姓 名:,18942532416,联系电话:,3454862343,QQ,:,成功后才能骄傲,个性格言:,男,性 别:,个人性格塑造:,沉稳,、细心、胆识、积极、大度、诚信、,担当,个人,能力,塑造:,观察力、思考力、决策力、组织力、影响力、执行力,讨论内容,SOA,、,ESB,、,SAAS,、,微服务,1,:,互联网,高并发系统,-,需要解决的,问题,3,:,Spring,Cloud,和,dubbo,比较,4,:,JAVA,互联网技术选型,5,:,互联网,高可用性(HA)系统,-,需要解决的问题,2,:,互联话题,:,独立,访问者数量(,unique visitors,)、,重复,访问者数量(,repeat visitors,)、,页面,浏览数(,page views,)理解,技术架构建议,6,:,SOA(,面向服务的架构,),面向,服务的架构(,SOA,)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来,。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。,对于一个,SOA,解决方案来说就需要能够满足这些场景的业务需求,能够解决其中的各种技术问题,。,需要解决的基本问题包括,:,服务的描述问题,,描述,服务提供哪些功能,适用服务有哪些要求,服务,的注册和查找问题,,定义好的服务信息在哪发布,如何发布,到哪查找,如何查找,服务,通讯方式,,包括具体如何向服务发送请求,并获取应答,支持什么样的交互方式。,服务,流程问题,,对服务流程的灵活定制,执行监控等提供管理,服务,的管理问题,,服务的提供,撤销,改变这些情况如何进行管理,服务,质量问,题,如何保障安全性,通讯的可靠性,以及事务完整性如何保证,整个,系统的效率问题,,包括查找效率,通讯效率,服务运行处理效率等,系统,能够提供什么样的开发工具,支持什么样的开发,模式,系统,运行情况是否可以及时了解,是否可以及时获取故障信息,是否可以提供运行状态信息,以利于系统的优化。,ESB(,企业服务总线,),ESB,全称为Enterprise Service Bus,即企业服务总线。,它是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。,大规模,分布式的企业应用需要相对简单而实用的中间件技术来简化和统一越来越复杂、繁琐的企业级信息系统平台。面向服务体系架构(,SOA,)是能够将应用程序的不同功能单元通过服务之间定义良好的接口和契约联系起来。,SOA,使用户可以不受限制地重复使用软件、把各种资源互连起来,只要,IT,人员选用标准接口包装旧的应用程序、把新的应用程序构建成服务,那么其他应用系统就可以很方便的使用这些功能服务。,SOA,与,ESB,的区别,SOA,是一种方式或架构,用于具有自服务功能的应用程序,应用程序随后通过用户接口(UI)或经过工作流将其聚合成用户需要的功能。服务不仅是可复用代码的组件,更是运行程序的一部分,客户端可以不必合并它自己的代码直接调用该程序。服务是与业务相关的一个定义。,ESB是用于调节 SOA 中的调用者及服务提供者的机制。它使得调用者在不知道提供者或提供者使用的地址的情况下调用该服务,。,ESB 可在多个提供者、提供者的负载平衡及停止使用提供者(当失效时)之间进行选择,并且基于调用者的需求在提供者之间进行选择,这些提供者提供了各种质量级别的服务。ESB 能够调节同步或异步服务,事实上对于同一服务可以提供同步及异步的访问。,因此 SOA 和 ESB 是相对应的。具备 SOA 的应用程序应当使用 ESB 来调用它的服务。SOA 和 ESB 不必用 Web 服务实现。然而,经常需要 ESB 来调用服务,该服务提供自我描述及发现的能力,这由 Web 服务帮助完成。在 SOA 中经常需要由一种技术实现的调用者,它们用于调用由其它技术实现的服务,这也由 Web 服务帮助完成。所以 SOA、ESB 和 Web 服务都集中于创建这样的领域:一个应用程序中的功能在其它应用程序中也是可用的,本质是复用性。,SAAS,(,软件即服务,),SaaS,是Software-as-a-Service(软件即服务)的,简称,它,与“,on-demand software”,(按需软件,),,,the application service provider(ASP,,应用服务提供商,),,,hosted software(,托管软件,),所具有相似的含义。它是一种通过,Internet,提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。,对,企业来说,SaaS的,优点:,从技术方面来看:SaaS是简单的部署,不需要购买任何硬件,刚开始只需要简单注册即可。企业无需再配备IT方面的专业技术人员,同时又能得到最新的技术应用,满足企业对信息管理的需求。,从投资方面来看:企业只以相对低廉的“月费”方式投资,不用一次性投资到位,不占用过多的营运资金,从而缓解企业资金不足的压力;不用考虑成本折旧问题,并能及时获得最新硬件平台及最佳解决方案。,从维护和管理方面来看:由于企业采取租用的方式来进行物流业务管理,不需要专门的维护和管理人员,也不需要为维护和管理人员支付额外费用。很大程度上缓解企业在人力、财力上的压力,使其能够集中资金对核心业务进行有效的运营;SaaS能使用户在世界上都是一个完全独立的系统。如果您连接到网络,就可以访问系统。,对企业来说,SaaS的,缺点,1,.安全性:企业,尤其是大型企业,很不情愿使用SaaS正是因为安全问题,他们要保护他们的核心数据,不希望这些核心数据由第三方来负责。,2,.标准化:SaaS解决方案缺乏标准化。这个行业刚刚起步,没有明确的解决办法,一家公司可以设计建立一个解决方案。鉴于复杂和高度可定制的ERP产品,这是一个冒险的建议。,什么是微服务架构,微服务架构优势,独立,部署,:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。,技术,选型灵活,:微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,当需要对技术栈进行升级时所面临的风险较低,甚至完全重构一个微服务也是可行的。,容错,:当某一组建发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。,扩展,:单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。,SOA,和微服务架构的区别,如果,一句话来谈SOA和微服务的区别,即微服务不再强调传统SOA架构里面比较重的ESB企业服务总线,同时SOA的思想进入到单个业务系统内部实现真正的组件化。,微,服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用。这些小应用之间通过服务完成交互和集成。每个小应用从前端web ui,到控制层,逻辑层,数据库访问,数据库都完全是独立的一套。在这里我们不用组件而用小应用这个词更加合适,每个小应用除了完成自身本身的业务功能外,重点就是还需要消费外部其它应用暴露的服务,同时自身也将自身的能力朝外部发布为服务。,首先,对于应用本身暴露出来的服务,是和应用一起部署的,即服务本身并不单独部署,服务本身就是业务组件已有的接口能力发布和暴露出来的,其次,微,服务架构本身来源于互联网的思路,因此组件对外发布的服务强调了采用HTTP Rest API的方式来进行。,微,服务的基本思想在于考虑围绕着业务领域组件来创建应用,这些就应用可独立地进行开发、管理和加速。在分散的组件中使用微服务云架构和平台使部署、管理和服务功能交付变得更加简单。,高,可用,什么是高可用性,高可用性(HA),系统,是目前企业防止核心计算机系统因故障停机的最有效手段。,高可用性(HA)的功能,1,、软件故障监测与排除,2,、备份和数据保护,3,、管理站能够监视各站点的运行情况,能随时或定时报告系统运行状况,故障能及时报告和告警,并有必要的控制手段,4、,实现错误隔离以及主、备份服务器间的服务切换,HA的工作,方式:,HA有主从方式和双工方式两种工作模式,高,可用性方案则利用更少的冗余部件同时由软件检测故障,一旦故障发生立即隔离损坏部件,通过提供故障恢复实现最大化系统和应用的可用性。,容错,技术随着处理器速度的加快和价格的下跌而越来越多地转移到软件中。未来容错技术将完全在软件环境下完成,那时它和高可用性技术之间的差别也就随之消失了。,互联网,高,可用性(HA)系统,-,需要解决的问题,一,:负载均衡与反向代理,二,:隔离,三,:限流,四,:降级,五:超时与重试,六:回滚,七:压力测试与应急预案,高,可用,-,负载均衡,负载,均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。,软件,负载均衡解决方案,是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。,软件,解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作系统本身的Bug,往往会引起安全问题。,硬件,负载均衡解决方案,是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。,高,可用,-,反向代理,反向,代理(Reverse Proxy),方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。,代理,服务器有三种,:,1,标准的代理缓冲服务器,一个标准的代理缓冲服务被用于缓存静态的网页(例如:,html,文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。,2,透明代理缓冲服务器,透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的,IP,和端口)。,3,反向代理缓冲服务器,反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始,WEB,服务器的负载。反向代理服务器承担了对原始,WEB,服务器的静态页面的请求,防止原始服务器过载,。,安全反向代理用途:,可以,提供从防火墙外部代理服务器到防火墙内部安全内容服务器的加密连接。,可以,允许客户机安全地连接到代理服务器,从而有利于安全地传输,信息。,安全,反向代理会造成各安全,连接加密,数据所涉及的系统开销而变慢,。,SSL 提供了高速缓存机制,,连接双方重复,使用先前协商的安全,参数,大大降低,后续连接的系统开销。,高,可用,-,隔离术,线程,隔离,:,线程隔离主要是指线程池隔离,在实际使用时,我们会把请求分类,然后交给不同的线程池处理。当一种业务的请求处理发生问题时,不会将故障扩散到其他线程池,从而保证其他服务可用。,进程,隔离,由于传统的系统所有功能都,集中在,一个系统中,,为了,避免系统其中一个模块功能出现问题导致整个系统无法使用的情况发生,将其该系统拆分成多子系统实现物理隔离,故通过进程隔离使得某一个子系统出现问题时不影响到其他子系统。,集群,隔离,随着调用方的增多,当秒杀(并发量特别大功能),类似,的服务被刷新会影响到其他服务的稳定性时,应该考虑为,秒杀(并发量特别大功能)类似的,服务提供单独的服务集群,即分服务分组,这样当某一个分组出现问题时,不会影响到其他分组,从而实现了故障隔离愿景。,机房隔离,随着对系统可用性的要求,会进行多机房部署,每一个机房的服务都有自己的服务分组,本机房的服务应该只调用本机房的服务,不进行跨机房调用。其中,一个机房服务发生问题时,可以通过,DNS/,负载均衡将请求全部切到另一个机房,或者考虑服务能自动重试其他机房的服务,从而提升系统可用性。,高,可用,-,隔离术,读写隔离,为了,提高数据访问,一般采用,redis,主从模式将读和写进群分离,在正常情况下,当主,redis,集群,出现问题时,从,redis,集群还是可以用的,从而不影响用户的访问。,动静隔离,例如当用户,访问如结算页时,如果,JS/CSS,等静态资源也在结算页系统中时,很,可能因为,访问量太大导致带宽被打满导致出现不可用,。,为了不影响结算等用户操作的功能,将其,JS/CSS,等静态,资源静态化与用户操作功能分开部署。,资源隔离,最,常见的资源如磁盘、,CPU,、网络;对于宝贵的资源都会存在竞争问题。,我们,可以使用,JIMDB,数据同步时要,dump,数据,,SSD,盘容量用了,50%,以上,,dump,到同一块磁盘时遇到了容量不足的问题,我们通过单独挂一块,SAS,盘来专门同步数据。还有如使用,Docker,容器时,有的容器写磁盘非常频繁,因此要考虑为不同的容器挂载不同的磁盘,。,高,可用,-,限流,在,开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询(评论的最后几页),因此需有一种手段来限制这些场景的并发/请求量,即限流。,限,流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,,一旦达到限制速率则可以拒绝服务(定向到错误页或告知资源没有了)、排队或等待(比如秒杀、评论、下单)、降级(返回兜底数据或默认数据,如商品详情页库存默认有货)。,一般,开发高并发系统常见的限流有:,限制总并发数(比如数据库连接池、线程池)、限制瞬时并发数(如nginx的limit_conn模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(如Guava的RateLimiter、nginx的limit_req模块,限制每秒的平均速率);其他还有如限制远程接口调用速率、限制MQ的消费速率,。另外还可以根据网络连接数、网络流量、CPU或内存负载等来限流。,高,可用,-,降级,降级,的最终目的是保证核心服务可用,即使是有损的。而且有些服务是无法降级的(如加入购物车、结算),。,降级,预案,在,进行降级之前要对系统进行梳理,看看系统是不是可以丢卒保帅;从而梳理出哪些必须誓死保护,哪些可降级;比如可以参考日志级别设置预案:,一般,:比如有些服务偶尔因为网络抖动或者服务正在上线而超时,可以自动降级;,警告,:有些服务在一段时间内成功率有波动(如在,95100%,之间),可以自动降级或人工降级,并发送告警;,错误,:,比如可用率低于,90%,,或者数据库连接池被打爆了,或者访问量突然猛增到,系 统能,承受的最大阀值,此时可以根据情况自动降级或者人工降级;,严重,错误:,比如因为特殊原因数据错误了,此时需要紧急人工降级。,降级,按照是否自动化可分为:自动开关降级和人工开关降级。,降级,按照功能可分为:读服务降级、写服务降级。,降级,按照处于的系统层次可分为:多级降级,。,降级,的功能点主要从服务端链路考虑,即根据用户访问的服务调用链路来梳理哪里需要降级:,页面降级、,页面片段,降级、,页面异步请求,降级、,服务功能,降级、,读,降级、,写,降级,自动,开关,降级:超时降级、,统计失败次数,降级、,故障,降级、,限流,降级,人工,开关,降级:,读服务,降级、,写服务降级,高,可用,-,超时与重试,在实际开发过程中,我们见过太多故障时因为没有设置超时或者设置得不对而造成的,而这些故障都是因为没有意识到超时设置的重要性而造成的。如果应用不设置超时,则可能会导致请求响应慢,慢请求积累导致连锁反应,甚至造成应用雪塌。而有些中间件或者框架在超时后进行重试(例如,dubbo,默认重试两次),读服务天然适合重试,但写服务大多不能重试(如写订单、支付等),重试次数太多会导致多倍请求流量。,例如模拟了,Ddos,攻击(分布式拒绝服务,(DDoS:Distributed Denial of Service),攻击指借助于客户,/,服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动,DDoS,,通常,攻击者使用一个偷窃帐号将,DDoS,主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在网络上的许多计算机上。代理程序收到指令时就发动攻击。利用客户,/,服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。),,后果可能是灾难,因此,务必设置合理的重试机制,并且应该和熔断、快速失败机制配合。所以在进行代码,Review,时,一定记得,Review,超时与重试机制。,高,可用,-,回滚,事务回滚,在执行数据库,SQL,时,如果我们检测到哦事务提交冲突,那么事务中所有执行的,SQL,要进行回滚,目的是防止数据库出现数据不一致。,代码库回滚,在开发项目时一定要将代码维护到代码仓库,从而进行版本管理。有了版本控制系统后可记录代码的历史版本,在出现问题时候可以方便回滚。,部署版本回滚,代码测试完成后,接下来要进行系统部署,在部署时要考虑当代码逻辑出现错误后如何快速恢复,数据版本回滚,在设计消息队列时,重要业务会对消息队列进行副本处理,以便万一业务逻辑出现问题能进行历史数据回滚,从而修复问题。,静态资源版本回滚,静态化页面资源后,每次内容变更时我们都会生成一个全量新版本放到项目的文件目录中,从而保证版本可追溯,出现问题时能及时回滚。,高,可用,-,压力测试,线下压力测试,通过如,Jmeter,,,Apac,,,he ab,压力测试系统的某一个接口等(如登录、查询订单)或者某一个组件(例如数据库连接池),然后进行调优(如调优,JVM,参数,优化代码等),实现单个接口或者组件的性能最优。,线上压力测试,线,上压力测试份方式非常多,按读分为读压、写压测和混合压测,按照数据仿真度分为仿真压力测试和引流压力测试,按照给用户提供服务分为隔离集群压力测试和线上集群压力测试。,系统优化和容灾,拿,到全面的压力测试报告后,接下来就是分析报告,然后进行一些有这对性的优化,如硬件升级、系统扩容、参数调优、代码优化(代码同步改异步)、架构优化(如加缓存、读写分离、历史数据归档)等。在扩容时也需要考虑容灾,比如分组部署、跨机房部署。容灾是通过部署多组(单机房或多机房)相同系统,当其中一组出现问题时,可以切换到另一个分组,保证系统可用,高,可用,-,应急预案,在系统压力测试之后发现一些系统瓶颈,在系统优化之后会提升系统吐吞量并降低响应时间,容灾之后的系统可用性得以保障,但还是会存在一些风险,如网络抖动、某台机器负载过高、某个服务变慢、数据库,Load,值过高,为了防止因为这些问题而出现系统雪崩,需要针对这些情况制定应急预案,从而在出现突发情况时,有响应的措施来解决掉这些问题。,应急预案可按照如下几步进行:首先进行系统分级,然后进行,全链路分析,、,配置监控,,最后制定应急预案。,互联网,高并发系统,-,需要解决的问题,一,:应用缓存,二,:,HTTP,缓存,三,:多级缓存,四,:池化,五:异步并发,六:扩容,七:队列,高并发,-,应用,缓存,堆缓存,使用,Java,堆内存来存储缓存对象。使用堆缓存的好处是没有序列化,/,反序列化,是最快的缓存。缺点也很明显,当缓存的数据量很大时,,GC,(垃圾回收)暂停时间会变长,存储容量受限于堆空间大小。一般通过软引用,/,弱引用来存储缓存对象,即当堆内存不足时,可以强制回收这部分内存释放堆内存空间。一般使用堆缓存存储较热的数据。有,Guava Cache,、,Ehcache 3.x,、,MapDB,实现,堆外缓存,即缓存数据存储在堆外内存,可以减少,GC,暂停时间(堆对象转移到堆外,,GC,扫描和移动的对象变少),但是,读取数据时需要序列化,/,反序列化,因此会比堆缓存要慢很多。有,Ehcache 3.x,、,MapDB,实现,磁盘缓存,即缓存数据存储在磁道上,在,JVM,重启时数据还存在的,而堆缓存,/,堆外缓存数据会丢失,需要重新加载。,有,Ehcache 3.x,、,MapDB,实现,高并发,-,应用,缓存,分布式缓存,之前缓存提到是进程内缓存和磁盘缓存,在多,JVM,实例的情况下,会存在两个问题:,1,、单机容量问题;,2,、数据一致性问题(多台,JVM,实例的缓存数据不一致怎么办,?,),这个问题不用纠结,既然数据允许缓存,则表示允许一定时间内的不一致,因此可以设置缓存数据的过期时间来定期更新数据;,3,、缓存不命中时,需要回源到,DB/,服务请求多变问题:每个实例在缓存不命中的情况下都会回源到,DB,加载数据,因此多实例后,DB,整体的访问量变多了解决办法是可以使用如一致性哈希分片算法。因此,这些情况可以考虑使用分布式缓存来解决。,可以使用,ehcache clustered(,配合,Terracotta server),实现,JAVA,进程间分布式缓存。最好的办法是使用,redis,实现分布式缓存。,高并发,-,HTTP,缓存,浏览器,缓存是指当我们使用浏览器访问一些网站页面或者,http,服务时,根据服务端返回的缓存设置响应头将响应内容缓存到浏览器,下次可以直接使用缓存内容或者仅需要去服务端验证内容是否过期即可。这样的好处可以减少浏览器和服务端之间来回传输的数据量,节省带宽提升性能。,解决办法:,内容,不需要动态(计算、渲染等)速度更快,内容越接近于用户速度越快。像,apache traffic server,、,squid,、,varnish,、,nginx,等技术都可以来进行内容缓存。还有,CDN,就是用来加速用户访问的:,即用户首先访问到全国各地的,CDN,节点(使用如,ATS,、,Squid,实现),如果,CDN,没命中,会回源到中央,nginx,集群,该集群如果没有命中缓存(该集群的缓存不是必须的,要根据实际命中情况等决定),最后回源到后端应用集群。,高并发,-,多级缓存(分布式缓存),高并发,-,池,化,在应用系统开发过程中,我们经常会用到池化技术,如对象池、连接池、线程池等,通过池化来减少一些消耗,以提升性能。对象池通过复用对象从而减少创建对象、垃圾回收 的开销。但是,池化不能太大,太大会影响,GC,时的扫描时间。连接池如数据库连接池、,Redis,连接池、,Http,连接池,通过复用,TCP,连接减少创建和释放连接的时间来提升性能。线程池也是类似的,通过复用线程提升性能。也就是说池化的目的就是通过复用技术提升性能。,高并发,-,扩容,1,、读写分离:,当数据库访问量还不是很大的时候,我们可以适当增加服务器,数据库主从复制的方式将读写分离,2,、垂直分区:,当写入操作一旦增加的时候,那么主从数据库将花更多的时间的放在数据同步上,这个时候服务器也是不堪重负的;那么就有了数据的垂直分区,数据的垂直分区思路是将写入操作比较频繁的数据表,如用户表,_user,或者订单表,_orders,那么我们就可以把这个两个表分离出来,放在不同的服务器,如果这两个表和其他表存在联表查询,那么就只能把原来的,sql,语句给拆分了,先查询一个表,在查询另一个,虽然说这个会消耗更过性能,但比起那种大量数据同步,负担还是减轻了不少;,3,、水平分区:,但是往往事情不尽人意,可能采取垂直分区能撑一段时间,由于网站太火了,访问量又每日,100w,一下子蹦到了,1000w,这个时候可以采取数据的进行分离,我们可以根据,user,的,Id,不同进行分配,如采取,%2,的形式,或者,%10,的形式,当然这种形式对以后的扩展有了很大的限制,当我由,10,个分区增加到,20,个的时候,所有的数据都得重新分区,那么将是一个的很庞大的计算量;以下提供几种常见的算法:,哈希算法:,就是采用,user_id%,的方式,;,范围:可以根据,user_id,字符值范围分区,如,1-1000,为一区,,1001-2000,则是另一个区等;,映射关系:,就是将,user_id,存在的所对应的分区放在数据库中保存,当用户操作时先去查询所在分区,再进行操作;,高并发,-,扩容分布式数据库,4,、分布式数据库(终极方案):,TDSQL,架构采用自动,扩容,机制、,分表,逻辑、,扩容,流程、,容灾,机制、,强同步,方案解决分布式数据库扩容方案,高并发,-,扩容分布式数据库,系统由三个模块组成:Scheduler、Agent、网关,三个模块的交互都是通过ZooKeeper完成,极大简化了各个节点之间的通信机制,相对于第二代HOLD的开发简单了很多。,Scheduler作为集群的管理调度中心,主要功能包括:,1,、管理,set,提供创建、删除set、set内节点替换等工作,;,2,、所有,的DDL操作统一下发和调度,;,3,、监控,set内各个节点的存活状态,当set内主节点故障,发起高一致性主备切换流程,;,4,、监控,各个set的CPU、磁盘容量、各个表的资源消耗情况,必要的时候自动发起扩容流程,;,5,、Scheduler,自身的容灾通过ZooKeqzer的选举机制完成,保证中心控制节点无单点,。,Agent模块负责监控本机MySQL实例的运行情况,主要功能包括:,1,、用,短连接的方式周期性访问本机的MySQL实例,检测是否可读、可写,若发生异常,会将异常信息上报到ZooKeeper,最终会由上面描述的Scheduler模块检测到这个异常情况,从而发起容灾切换,;,2,、检测,主备复制的执行情况,会定期上报主备复制的延时和延迟的事务数,若发生了主备切换,自动向新主机重建主备,因此MySQL的主备不需要DBA干预,对于新增的实例会自动采用xtrabackup通过主机自动重建数据,;,高并发,-,扩容分布式数据库,3,、检测,MySQL实例的CPU利用率和各个表的请求量、数据量、CPU利用率,上报到ZooKeeper,ZooKeeper通过全局的资源情况抉择如何扩容、缩容,;,监控是否有下发到自身的扩容任务,如有则会执行扩容流程(下面会有描述);,监控是否要发生容灾切换,并按计划执行主备切换流程,。,网关基于MySQL Proxy开发,在网络层、连接管理、SQL解析、路由等方面做了大量优化,主要特点和功能如下:,1,、解析SQL,将识别出的DDL语句直接存到ZooKeeper,让Keeper来统一调度;,2,、Watch ZooKeeper的路由信息,拉取最新的路由表保存到本地文件和内存;,3,、将SQL请求路由到对应的set,支持读写分离;,4,、对接入的IP、用户名、密码进行鉴权;,5,、记录完整的SQL执行信息,与秒级监控平台对接完成实时的SQL请求的时耗,成功率等指标监控分析;,6,、对count、distinct、sum、avg、max、min、order by、group by等聚合类SQL一般需要访问后端的多个set,网关会分析结果并做合并再返回,暂不支持跨set join和分布式事务;,7,、网关无状态,既支持与业务部署到一起,也可以独立部署(可通过TGW或者LVS做容灾)。,高并发,-,扩容(,Canal,分布式数据库同步,系统,),1.基于Canal开源产品,获取数据库增量日志数据。,2.典型管理系统架构,manager(web管理)+node(工作节点),a.manager运行时推送同步配置到node节点,b.node节点将同步状态反馈到manager上,3.基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.,高并发,-,队列应用场景,1,、异步处理:,使用队列的一个主要原因是进行异步处理,比如用户注册完成后,需要发送注册成功邮件,/,新用户积分,/,优惠卷等;缓存过期时,先返回过期数据,然后异步更新缓存、异步写日志等。,2,、系统解耦:,比如用户支付完成订单后,需要通知生产配货系统、发票系统、库存系统、推荐系统、搜索系统等进行业务处理。,3,、数据,同步,:,比如想把,mysql,变更的数据同步到,Redis,,或者将,mysql,数据同步到,mongodb,或者让机房之间的数据同步,或者主从数据同步等,有相关软件:,databus,、,canal,、,otter,等。使用数据总线队列进行数据同步的好处是可以保证数据修改的有序。,4,、流量削峰:,系统的瓶颈一般在数据库上,比如扣减库存、下单等,此时可以考虑使用队列将变更请求暂时放入队列,通过缓存,+,队列暂存的方式将数据库流量削峰。同样,对于秒杀系统,下单服务会是该系统的瓶颈,此时可以使用队列进行排队和限流,从而保护下单服务,通过队列暂存或者队列限流进行流量削峰,高并发,-,队列(,Canal,),1,、,Canal,同步缓存,2,、,Canal,下发任务给消息队列,Dubbo,详细介绍,Dubbo,是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成,。,主要核心部件,:,Remoting,:网络通信框架,,实现了 sync-over-async 和 request-response 消息机制,.,RPC,:一个远程过程调用的抽象,支持负载均衡、容灾和集群,功能,Registry,:服务目录框架用于服务的注册和服务事件发布和订阅,Dubbo,服务,集群,-,集群,容错模式,Dubbo,服务提供者集群与负载,均衡,Spring Cloud 19,个技术,Spring,Cloud,工具框架,1,、,Spring Cloud Config,配置中心,利用git集中管理程序的配置。,2、,Spring Cloud Netflix,集成众多Netflix的开源软件,3、,Spring Cloud Bus,消息总线,利用分布式消息将服务和服务实例连接在一起,用于在一个集群中传播状态的变化,4、,Spring Cloud for Cloud Foundry,利用Pivotal Cloudfoundry集成你的应用程序,5、,Spring Cloud Cloud Foundry Service Broker,为建立管理云托管服务的服务代理提供了一个起点。,6、,Spring Cloud Cluster,基于Zookeeper,Redis,Hazelcast,Consul实现的领导选举和平民状态模式的抽象和实现。,7、,Spring Cloud Consul,基于Hashicorp Consul实现的服务发现和配置管理。,8、,Spring Cloud Security,在Zuul代理中为OAuth2 rest客户端和认证头转发提供负载,均衡,9,、,Spring Cloud Sleuth SpringCloud,应用的分布式追踪系统,和,Zipkin,,,HTrace,,,ELK,兼容。,10,、,Spring Cloud Data Flow,一个云本地程序和操作模型,组成数据微服务在一个结构化的平台上。,Dubbo,架构高并发高可用选型技术,Spring Cloud 19,个技术,11,、,Spring Cloud Stream,基于,Redis,Rabbit,Kafka,实现的消息微服务,简单声明模型用以在,Spring Cloud,应用中收发消息。,12,、,Spring Cloud Stream App Start,ers,基于,Spring Boot,为外部系统提供,spring,的集成,13,、,Spring Cloud Task,短生命周期的微服务,为,SpringBooot,应用简单声明添加功能和非功能特性。,14,、,Spring Cloud Task App Starters,15,、,Spring Cloud Zookeeper,服务发现和配置管理基于,Apache Zookeeper,。,16,、,Spring Cloud for Amazon,Web Services,快速和亚马逊网络服务集成。,17,、,Spring Cloud Connectors,便于,PaaS,应用在各种平台上连接到后端像数据库和消息经纪服务。,18,、,Spring Cloud Starters,(项目已经终止并且在,Angel.SR2,后的版本和其他项目合并),19,、,Spring Cloud CLI,插件用,Groovy,快速的创建,Spring Cloud,组件应用,。,Spring Cloud,共集成了,19,个子项目,里面都包含一个或者多个第三方的组件或者框架!,Spring,Cloud,和,dubbo,比较,-,背景,Dubbo,,,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员,站点,(,阿里巴巴现在使用架构为,HSF,),。于,2012-10-24,最后版本,2.5.3,成为最后一版本,由当当接手维护,命名为,dubbox,Spring,Cloud,,从命名我们就可以知道,它是Spring Source的产物,Spring社区的强大背书可以说是Java企业界最有影响力的组织了,除了Spring Source之外,还有Pivotal和Netfix是其强大的后盾与技术输出。其中Netflix开源的整套微服务架构套件是Spring Cloud的核心。,如果,拿Dubbo与Netflix套件做对比,前者在国内影响力较大,后者在国外影响力较大,,在,背景上可以打个平手,;但是若要与Spring Cloud做对比,由于Spring Source的加入,在背书上,Spring Cloud,略胜一筹,但是在高并发上,dubbo,曾经在阿里的运营中实际承载过过亿用户同时在线的,,而Netflix,并没有实际的上线应用中体现过,。,Spring Cloud,下面有,19,个子项目(可能还会新增)分别覆盖了微服务架构下的方方面面,服务治理只是其中的一个方面,一定程度来说,,Dubbo,只是,Spring Cloud Netflix,中的一个子集。但是在选择框架上,方案完整度恰恰是一个需要重点关注的内容,当然从高可用和高并发一起考虑,,Spring Cloud,无疑是最佳选择,。,Spring,Source,架构高并发高可用选型技术,Spring,Cloud,和,d
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服