高并发处理思路与手段(四):应用拆分

比如一个股票系统有用户信息、开户、股票行情、交易、订单等,拆分后如下图所示:

原则

业务优先

每个系统都会有多个模块,每个模块又有多个业务功能;按照业务边界进行切割,再对模块进行拆分。

循序渐进

边拆分边测试,保证系统的正常运行。

兼顾技术:重构、分层

不能为了分布式而分布式,拆分过程不仅是业务梳理也是代码重构的过程,根据技术进行分层来分配工作,ui对用户体验,熟悉C和C++对服务器,熟悉数据库的对数据库,做到术业有专攻,合适的人去做合适的事情。

可靠测试

测试完毕后,才可进行下一步,每一步都要有足够的测试才可进行下一步,避免小错误引起蝴蝶效应。

思考

应用之间通信: RPC ( dubbo等)、消息队列

消息队列通常用于传输数据包小但是数据量大,对实时性要求低的场景,比如下单后短信通知客户。而采用RPC要求实时性高,这里通常不会http或者service服务,原因是使用PRC调用service方法无感知,在配置好后和本地方法很像。

应用之间数据库设计:每个应用都有独立的数据库

通常情况下,每个应用都有自己独立的数据库,如果共同使用的信息,可以考虑放在common中使用。

避免事务操作跨应用

分布式事务是一个很消耗资源的问题,应用之间服务分开开发,能够保持相互独立。

框架

dubbo

spring cloud

微服务

独立的服务共同组成一个系统

要实践微服务要解决4个问题:

①客户端如何访问这些服务

API Gateway提供统一的服务入口,对前台透明,同时可以聚合后台的服务,提供安全过滤流控等api的管理功能。

②服务之间是如何通信的

异步的话使用消息队列,同步调用使用REST或者是RPC,Rest可以使用springboot,RPC通常使用Dubbo。
同步调用一致性强但是出现调用问题,REST一般基于http实现,能够跨客户端,同时对客户端没有更多的要求。
RPC的传输协议更高效,安全也更加可控。特别是在一个公司内部如果有统一的开发规范和统一的框架,它的开发效率会更加明显。
而异步消息在分布式系统中有特别广泛的应用,它既能减少调用服务之间的耦合,又能成为调用之间的缓冲,确保消息积压不会冲垮被调用方。
同时保证调用方的用户的体验,继续干自己的活。付出的代价是一致性的减慢,需要接受数据的最终一致性

③如何实现如此多服务

在微服务架构中一般每一服务都会拷贝进行负载均衡,服务如何相互感知,如何相互管理,这就是服务发现的问题了,一般都是进行服务注册信息的分布式管理。

④服务挂了该如何解决,有什么备份方案和应急处理机制

分布式最大的特性就是网络是不可靠的,当系统是由一系列的调用链组成的时候,其中任何一个出问题都不至于影响到整个链路。
相应的手段有:重试机制、应用的限流、熔断机制、负载均衡、系统降级。

原文地址:https://www.cnblogs.com/shamo89/p/10020521.html

时间: 2024-10-08 11:58:19

高并发处理思路与手段(四):应用拆分的相关文章

高并发处理思路与手段(三):消息队列

一.消息队列在实际场景中的使用 流程A在处理时没有在当前线程同步的处理完而是直接发送了一条消息A1到队列里,然后消息队列过了一段时间(可能是几毫秒 几秒 几分钟)这个消息开始被处理,消息处理的过程就相当于流程A被处理;当然这只是一个简单的模型下面我们套用实际的场景来看一下,比如下单成功后发送短信提醒;如果没有消息队列我们会选择同步调用发短信的接口并等待短信发送成功,正常情况下这么做是没有问题的但是如果发短信的时候短信接口出问题了或者说调用超时了等意外情况,这个时候我们就需要设计对应的方案来解决前

高并发处理思路与手段(一):扩容

当一个开发人员提升计算机系统负荷时,通常会考虑两种方式垂直扩展和水平扩展.选用哪种策略主要依赖于要解决的问题以及系统资源的限制.在这篇文章中我们将讲述这两种策略并讨论每种策越的优缺点.如果你已经有一个软件系统需要不断成长,那么你将有意或者无意中选择这两种策略中的一种. 垂直扩展 在垂直扩展模型中,想要增加系统负荷就意味着要在系统现有的部件上下工夫,即通过提高系统部件的能力来实现.例如,假设你现在负责一批木材采伐的操作. 在这个例子中,我们假设有3辆卡车,每辆车一次可以运25根木材,计算花费1小时

高并发处理思路与手段(五):应用限流

限流就是通过对并发访问/请求进行限速或一个时间窗口内的请求进行限速,从而达到保护系统的目的.一般系统可以通过压测来预估能处理的峰值,一旦达到设定的峰值阀值,则可以拒绝服务(定向错误页或告知资源没有了).排队或等待(例如:秒杀.评论.下单).降级(返回默认数据). 限流不能乱用,否则正常流量会出现一些奇怪的问题,从而导致用户抱怨. 假设有130W到140W的数据插入到数据库中,如果没有做限流,数据库的主库会突然接收到130w的插入操作. 首先是网络上的开销,很可能直接把带宽占满,导致其他请求无法正

java web开发 高并发处理

java web开发 高并发处理 java 高并发 java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF.尤其是Web2.0的应用,数据库的响应是首先要解决的. 一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降.常用的优化措施是M-S(主-从)方式进行同步复制,将查询和操作和分别在不

淘宝双11促销背后高并发处理之淘宝网采用什么技术架构来实现网站高负载

转自:http://china-chill.blog.163.com/blog/static/2049210522012101782432304/ 时间过得很快,来淘宝已经两个月了,在这两个月的时间里,自己也感受颇深.下面就结合淘宝目前的一些底层技术框架以及自己的一些感触来说说如何构建一个可 伸缩,高性能,高可用性的分布式互联网应用. 一 应用无状态(淘宝session框架) 俗 话说,一个系 统的伸缩性的好坏取决于应用的状态如何管理.为什么这么说呢?咱们试想一下,假如我们在session中保存

被神化的海量数据处理和高并发处理

http://blog.csdn.net/hawksoft/article/details/7192207 实任何简单的问题,只要规模大了都会成为一个问题,就如中国人口多,很多小问题都会变成大问题一样.但处理这种海量数据的方法无非就是分治和”人海”战术.使用人海战术的前提是问题的划分能够支持这种人海战术,其手段无非是切割(纵向,横向)和负载均衡.纵向分隔主要是按业务(功能)来分,也就是所谓面向服务架构,横向分隔方式比较多,主要依赖于所处理的对象属性,比如时间属性或者特定业务数据属性划分(比如铁路

Linux统系统开发11 Socket API编程2 多进程 多线程 高并发处理

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <纲要> Linux统系统开发11 Socket API编程2 多进程 多线程 高并发处理 UDP服务器 客户端最小模型,处理字符转大写 TCP 多进程并发服务器模型,为每个客户端开启一个进程: TCP 多线程服务器模型,使用wrap函数封装 作业: ---------------------------------------------------- UDP服务器 客户端最小模型,处理字符转大写 [em

张左峰的分享 网页游戏制作技术 加密的设计思路与手段

网页游戏制作技术 加密的设计思路与手段 必备工具:Doswf 好朋友Laan开发,请自行百度搜索 今天太晚了,明天再更新内容...咔咔咔

C# 多线程与高并发处理并且具备暂停、继续、停止功能

原文:C# 多线程与高并发处理并且具备暂停.继续.停止功能 --近期有一个需要运用多线程的项目,会有并发概率,所以写了一份代码,可能有写地方还不完善,后续有需求在改 1 /// <summary> 2 /// 并发对象 3 /// </summary> 4 public class MeterAsyncQueue 5 { 6 public MeterAsyncQueue() 7 { 8 MeterInfoTask = new MeterInfo(); 9 } 10 11 publi