当前位置: 首页 > 科技观察

如何应对复杂系统架构的演进

时间:2023-03-15 09:35:31 科技观察

随着业务复杂度和系统吞吐量的增加,统一部署所有功能变得更加困难,各个功能模块又相互影响,使得系统变得繁琐和复杂。脆弱的;因此,需要对系统进行Split、解耦,升级系统内部结构,以提高系统容量和健壮性。下面主要分为系统分裂和结构演化两个部分。1.系统拆分系统拆分从资源角度可以分为:应用拆分和数据库拆分。从采用的先后顺序可以分为:横向扩张、纵向拆分、业务拆分、横向拆分。图1系统分解原理1.水平扩展水平扩展是解决系统瓶颈的初始方案,也是最好的解决方案。主要从以下两个方面进行扩展:为应用添加实例,构建集群,扩大系统吞吐量。上。数据库采用主从分离读写。数据库其实是系统最应该保护的资源。2.垂直拆分垂直拆分是对系统进行拆分的真正开始,主要是从业务功能的角度出发。比如拆解用户系统、商品系统、交易系统等。为了解决拆分后子系统之间调用相互依赖的问题,此时会引入服务调用治理。系统的复杂度增加了,但是系统基本解耦了,稳定性也相对提高了。良好的降级可以避免其他系统功能异常导致系统崩溃。业务对应的库也会根据对应的业务拆分为用户库、商品库、交易库等。3、业务拆分业务拆分主要是针对功能特性拆分应用层,比如拆分出交易:购物车、结算页、订单、秒杀等系统。然后根据业务的特点,进行针对性的处理,比如闪购系统。由于同时参与闪购的商品有限,可以将商品信息提前加载到JVM缓存中,减少外部调用提升性能,同时减轻商品系统的压力。分库也可以分为几个步骤:垂直分表,垂直分库,水平分表,水平分库,分表;垂直分表是指将一个大表拆分为多个小表,可以根据字段更新或者查询频率进行拆分。图2.产品列表拆分垂直分仓是指按业务拆解仓库,比如拆分出订单仓库、商品仓库、用户仓库。水平分表是通过将一个表拆分成多个表来解决数据量大的问题;水平分库分表是对表进行进一步的分拆;图3分库分表4.横向拆分服务分层,系统服务构建块,拆分功能和非功能系统,业务组合系统,如大中型办公室或前台的拆分已经成为最近流行;中台是一个积木组件,承担服务功能的输出。前台更多的是结合积木式服务,及时响应业务发展。例如,在电商网站的单品页面,可以看到主图、价格、库存、优惠券或推荐等,这些都是通过积木组件组合呈现的。数据库也可以分离冷热数据;过期或过季产品可以存档,如诺基亚3210手机,早已停产,未售出;用户查看订单时,只查看最近1、2年的信息,2年前的数据查看量较小,存储设计时可以区别对待。2.结构演化结构演化主要是随着系统复杂度和性能要求的提高,不得不进行的系统内部结构升级;早期的系统基本上都是直接连接数据库,但是系统拆分后,系统的功能无法单独完成,需要依赖其他系统,于是出现了远程调用;图4早期应用架构随着自身系统的业务发展,对性能要求较高,数据库在一定程度上成为了瓶颈,会引入缓存和索引来解决key-value和复杂检索;索引加缓存现在已经成为高并发的基本解决方案,只是实现过程会有所不同;2014年3亿热点数据升级系统时,技术选择是solr+redis,考虑到数据量太大,数据在solr中只存储索引,结果只存储和返回主键id,然后通过id从redis中读取数据,redis并不存储所有数据,为数据设置了过期时间。如果redis没有激活,则查询回源库,反向写入redis;主要考虑资源和性能的平衡,solr的存储减少和IO性能的提升,结果数据只存储在redis中,redis数据大部分是运行后的热数据;当然现在也流行ES+Hbase的组合。图5添加缓存和索引对于频繁使用的数据,从集中式缓存中读取不一定能满足性能要求。可以考虑将数据放入JVM缓存中,比如类别信息。品类是电商系统的基础数据,数据量不大。、调用量大;在某些情况下,使用ThreadLocal作为线程内缓存也是一种有效的手段,但需要考虑数据的清理和有效性;修改商品信息时,业务核对商品信息有名称长度、状态、库存和每个业务模型等,对于参数的统一验证方式,参数为商品编号,所以每个验证方式需要读取产品一次。使用线程缓存可以解决这个问题。性能提升高达20ms,产品每分钟读取量减少。近万次;图6添加本地缓存有时依赖于不稳定的系统性能,避免第三方系统对系统的影响,关闭依赖服务的数据循环,像Dao一样将其作为系统的数据源;例如,商品系统强烈依赖商家系统的业务信息服务,如果业务的服务不稳定,则商品系统有一半服务不稳定,缓存一份业务信息以减少外部风险,把风险控制在自己手中;图7.远程服务演化为数据源用户体验最近越来越受到重视,对系统响应时间性能要求也越来越高。异步是个不错的选择:消息中间件;电商下单就是一个很好的案例。当用户点击下单时,服务端并不直接保存数据,而是向订单系统发送消息,并直接返回支付页面。用户支付过程中,订单系统异步保存数据;业务层和数据层的范围越来越广,业务层分为基础服务和组合服务;数据层分为数据源和索引缓存;依赖的技术或中间件需要有效组合,以解决系统遇到的各种问题。图8复杂结构3.***系统的结构逐渐变得复杂,稳定性和鲁棒性逐渐提高;技术选型需要结合业务痛点、技术储备、资源条件,否则会不切实际、笼统;以上是我对近几年所经历的技术变革和升级的总结,以后可以详细分享个别点。系统拆分的关键是微服务,架构的演进是技术的升级。作者:许贤军,京东系统架构师,从事架构设计与开发,熟悉各种开源软件架构。在Web开发和架构优化方面具有丰富的实践经验。【本文来自专栏作者张凯涛微信公众号(凯涛的博客)公众号id:kaitao-1234567】点此查看作者更多好文