逻辑层的职责,功能上:
用户相关:用户登录登出,用户信息设置查询。
好友相关:添加好友,删除好友,修改好友。
消息相关:收发好友消息,收发陌生人消息等。
A给B发消息,先判断B是否把A拉黑,如果拉黑消息直接丢弃。如果没有,还要判断消息是否有涉黄政治病毒等内容,这部分验证交给反垃圾系统来处理。如果通过,接下来判断B用户数是否在线,在线发送到在线队列。离线,发送到离线队列。
逻辑层整体架构:
ALL IN ONE(业务垂直划分)方式----一个单独的业务一个组件(目录和文件)。优点:业务独立,耦合性降低,业务之间开发互不影响,开发效率高,运维相对简单。缺点:物理上一个模块,编译成本高,一个业务修改,重新上线,重启影响所有业务。使用场景,互联网公司使用较多,58,百度。
业务间物理崔志划分方式,每个业务一个独立的业务模块(进程)。用户,商品,搜索,交易,推荐,社区,运营活动,客服分成不同的独立进程(独立部署)
无状态业务逻辑层如何设计?
什么是无状态,系统不存储业务的上下信息,仅根据每次请求携带数据进行相应的业务逻辑处理。多个模块(子系统)之间完全对称。请求提交到任何服务器,处理结构都是完全一样的。
设计的关键因素:业务逻辑层不保存请求状态,业务逻辑层不保存数据,所有业务逻辑层服务器完全对称,当一台或多台宕机请求提交集群中的任意可用服务器,业务逻辑层通过负载均衡高可用。
负载均衡:服务器可用状态实时监控高的机制,自动转椅失败任务(机器)的机制,请求量和数据较高,将流量和数据分摊到集群中多台服务器的能力。通过心跳机制发现下游服务器不可用,剔除掉。一旦服务器可用,可以自动重建恢复。
同步调用:调用者阻塞模式,没有得到结果就不返回。
异步调用:调用后立即返回,结果完成后,通过状态、通知和回到来通知调用者。掉用着是非线程阻塞模式。
如果异步调用:例如:新用户注册请求,假设需要两步,一用户名和密码写入数据库,二发送注册成功邮件。异步方式实现:一新用户注册请求写入消息队列,直接返回成功给请求调用者。业务逻辑层通过消息队列中读取请求,异步执行第一步和第二步。调用者步阻塞,效率高,性能高。
异步调用场景:I/O模型:阻塞I/O模型,轮询非阻塞I/O模型,I/O复用模型(监听的文件句柄ID数字要小于1024)
高性能纯异步网络调用设计
server端链接池|server端收发队列,client端连接池|client端收发队列;超时队列与超时管理器;上下文管理器+状态机。
分级管理
硬件上:核心系统用好机器,边缘熊使用差机器。
部署层面上:服务部署隔离,避免故障带来的连锁反应,核心系统部署在物理机上,核心系统部署在不同机房上,边缘系统部署在虚拟机,边缘系统部署在共用机器上。
监控层面上:核心服务更多类型的监控(进程,语义,错误日志),监控力度更细,邮件和短信通知。
响应层面上:核心服务开发响应迅速,核心服务上线响应迅速,核心服务运维响应迅速,核心服务上线问题处理迅速。
设置合理超时
业务逻辑层和下游模块交互次数多,设置合理超时非常重要,下游服务宕机,线程死锁等,请求得不到响应,请求占用资源,调用方得不到响应,用户体验差。
请求的超时设置根据请求的平均响应延迟的2倍,响应延迟高超时可以设置3S,响应延迟低超时可以设置100MS。下游请求超时后,业务层根据预设的调度策略重试,一般3次,多次请求无好处(会造成下游压力,雪崩),请求转椅到下游其他同样的服务商。
业务逻辑层服务降级设计
网站高峰期,并发量大。服务能力有限,性能下降,服务宕机,系统雪崩。
保证核心服务可用(下单,交易),非核心服务弱可用,甚至不可用,降级设计方案(拒绝部分请求,关闭请求)
拒绝部分请求:拒绝低优先级服务的调用(评论,留言,私信),消息到达队列的时候工作线程会接收队列,如果发现消息队列已经超过1S就可以对此消息丢弃,另外还有一个方式直接丢弃非核心业务消息。减少服务调用并发数,随机丢弃一定比例的消息,或者按优先级丢弃消息。
关闭部分服务:非核心服务直接关闭,上游不直接不调用下游服务。
服务器幂等设计:请求失败会重试,保证服务重试调用和一次调用结果相同(幂等性)。不能保障幂等结果是悲剧的:转账,交易,支付。
天然幂等:离线消息设置为已读,多次设置都是一样的。
非幂等需要幂等设计:支付ID,支付状态,这两个一定要是原子的。每次支付前判断支付状态,未支付状态继续进行,已支付了就终止。也可以用记录的方式处理幂等设计。
超时管理器设计:发送下游包的超时管理,避免无限等待,单独线程,定时扫描,超时处理触发其回调。
上下文管理器:请求上下文,请求会带一个唯一的package_key,超时等删除上下文,所以在上游调用时一定要存储一个package_key,回调时候只可以对应上。
状态机管理器:异步调用的状态机,标志请求的状态,串行执行的状态机
相关推荐
"架构设计参考 高可用架构"这一主题旨在深入探讨如何构建能够承受高流量、确保服务连续性和提供优秀用户体验的系统。这是一份面向架构师、软件架构设计者以及对运维设计感兴趣的从业人员的学习资料。 首先,我们要...
《高可用架构 第1卷》是高可用架构社区推出的一部深入探讨系统高可用性设计与实践的专业书籍。高可用架构是指通过设计和构建能够容忍硬件、软件甚至网络故障的系统,来确保服务的持续性和稳定性。在互联网行业中,高...
根据提供的信息,“高可用架构讲座PPT”这一标题与描述明确指出了该文档的主要内容是关于高可用架构的讲座资料。接下来,我们将基于这个主题展开详细的解析与介绍,旨在为读者提供一个全面、深入的理解。 ### 一、...
### 从大型电商架构演进看互联网高可用架构设计 #### 一、互联网架构演进 **五种架构模型介绍** 1. **单体架构**:最初期的软件架构模式,将所有功能集成在一个紧密耦合的应用程序中。易于理解和部署,但随着系统...
可扩展、高可用、负载均衡网站架构设计方案 本文将详细介绍一个可扩展、高可用、负载均衡网站架构设计方案,该方案旨在解决高访问量网站的性能和可靠性问题。该方案包括以下几个方面: 一、基本需求 1. 高可用性...
### 高并发高可用的可伸缩架构设计原则 在当今互联网时代,随着用户规模的不断扩大和技术需求的日益复杂,构建能够支持高并发、具备高可用性和可伸缩性的系统架构变得至关重要。本文将深入探讨高并发高可用的可伸缩...
标题中提到的“砥砺前行”象征着在技术领域的持续奋斗与改进,同时“趣店同城双活高可用架构设计”明确指出了文章讨论的核心内容,即趣店集团为了提升系统的高可用性和业务连续性所采取的同城双活架构设计。这种设计...
### 开发者最佳实践日——高可用和可伸缩架构详解 #### 一、高可用的概念与实现 ##### 1.1 高可用定义 在IT领域,“高可用”(High Availability, HA)通常指的是系统在面对单点故障时能够维持正常运行的能力。...
应用服务层可以采用微服务架构,将核心业务逻辑拆分成多个独立的服务,并在不同的节点上部署这些服务。 3. **缓存机制**:合理利用缓存可以有效减轻后端系统的压力,提升响应速度。常见的缓存技术有Redis、Memcached...
在趣店集团的案例中,通过同城双活的高可用架构设计,不仅提高了业务的连续性和稳定性,也确保了在出现故障时能够快速切换服务,保障业务不受影响。这种架构设计在处理大流量和高并发场景时显得尤为重要,对于金融...
综上所述,陌陌IM的高可用架构通过合理的层设计和协议选择,实现了即时通讯系统的高可靠性、高效性和良好的可扩展性。其中,通讯协议的设计尤为关键,它直接关系到整个系统的性能和用户体验。通过这些知识点的学习,...
高可用分布式系统的设计之道 高可用分布式系统是指一种能够在出现故障或宕机的情况下继续提供服务的系统。为了实现高可用性,分布式系统需要解决许多挑战,包括无状态分布式系统和有状态分布式系统的高可用问题。 ...
4. **改善用户体验**:高质量的架构设计能够提高系统的响应速度和可用性,从而提升用户的整体体验。 #### 四、高可靠的架构设计 - **定义**:高可靠的架构设计指的是能够确保系统在各种情况下都能够正常运行的设计...
三层架构通常指的是将软件系统分为表示层、业务逻辑层和数据访问层三个独立的部分。这种分层方式旨在通过明确各层职责,促进软件组件间的解耦,使每个层级专注于特定的功能: - **表示层**:负责与用户的交互,展示...
2. 分层架构:将系统分为不同的逻辑层,如表示层、业务逻辑层、数据访问层等,有利于代码复用、模块化开发和职责划分。 3. 可扩展性:设计时需考虑未来需求增长,通过水平扩展(增加硬件资源)或垂直扩展(优化单个...
社交业务高可用架构的关键运维技术主要包括以下几个方面: 一、高可用架构的必要性 在IT行业,高可用架构是确保服务连续性和数据一致性的关键。高可用架构的必要性主要体现在以下几个方面: 1. 开发角度:保障服务...
### 业务系统架构的锐变与进化——京东虚拟商品的高可用架构设计 #### 一、虚拟业务系统特点 在京东虚拟商品系统中,我们首先需要理解其独特的业务特性: - **非标品属性**:虚拟商品往往不像实体商品那样具有...
同时,在设计过程中会考虑到软件的部署环境,例如是否需要支持集群部署来提升系统的高可用性。 3. 技术选型:根据需求分析和系统设计的结果,接下来需要选择合适的技术栈。技术选型不仅包括编程语言(在本例中为...