传统企业核心系统架构优化行动指南

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

传统企业核心系统架构优化

行动指南

很多传统企业的核心应用系统大多是单体应用:1-2台APP应用,后端1个数据库实例,如下图:

稍微好一点的可能会有一台单独的服务器用来部署报表类应用(报表业务与应用实现应用层面的解耦),但数据方面大多还是与APP共用统一数据库,如下图:

这实际上是由于企业的业务实际情况和行业属性导致的,该类核心应用系统大多为外采的、成熟的商业产品(迭代较慢,1~2年可能才有新版本推出),可以满足企业的正常业务系统,但大多会随着企业自身业务的快速发展,一段时间后会出现系统运行缓慢、运行卡顿等非正常情况。相信很多传统企业的IT工程师都会面临该类问题(就我本人随机与几家不同区域的传统企业信息负责人沟通后,全部面临或是曾经面临过),对于这类性能问题的解决大多受系统本身架构限制,除了对资源进行优化外,大多处于被动状态。另外对该类应用系统的性能问题进行分析后,大多的问题点也都集中在了数据库层面,诚然,即使中大型传统企业的核心系统其使用人数和并发量也基本上处于一个较低的值,单体应用、一台Tomcat 可以满足应用层面的并发(有一些情况除外,另外,据简单访谈,使用Tomcat的也相对少一点)。当然,资金和技术雄厚的传统企业可以采取比较激进的做法,即对现有核心系统进行服务化重构,或是冒高风险、花大价钱升级系统的当前版本(因为传统企业信息化建设相对闭塞滞后,同时也处于求稳的出发点,系统版本几年不更新很常见),激进的做法往往面临的高风险,也见过太多传统企业在所谓互联网转型和核心系统重构方面全面失败的案例。

结合实际优化过的几个企业案例,从整体解决方案的角度剖析一下该类问题的优化经验及技巧。总的来说,可以分为技术优化和业务优化。其中技术优化包括硬件升级、参数类优化;业务优化是指结合业务细节,对数据库的sql、程序代码以及架构等方面进行优化工作,具体如下。

一、技术优化

技术优化可以分为对硬件进行升级和对各类操作系统、中间件等进行参数优化两类。其中在系统部署上线前,就应该对系统响应的用户量、并发量、数据量等进行评估,选择适合的硬件配置、操作系统、中间件等并对其进行相应的安全加固和参数优化。

实际上当系统出现性能问题时,大多第一时间想到的是对硬件进行升级,如:增加内存、升级存储(如HDD升级到SSD等)、升级网络交换机扩大带宽、升级服务器等。这是一种简单有效但不治本的方法,甚至在治标方面也难以得到持久,因为系统的性能问题在硬件和应用之间,还有操作系统、中间件等,需要与之相互配套,之前也遇到过32位操作系统跑64G内存的情况(实则真的有一些老旧的应用真实地运行在32位操作系统上)。

在对硬件资源进行升级的同时,还应配套对操作系统、中间件、数据库等的参数进行优化,确保最大化、最合理地使用硬件资源,从而做到在吞吐量、并发量以及响应速度、处理速度等方面得到显著的提升。参数类优化整体可以分为如下:

(1)OS级别的优化:包括操作系统类型选择(Windows/Linux)、内核更新升级(如需)、内核参数、网络参数、安全参数等(如:系统打开文件最大数、最大进程

数、关闭路由包转发、处理无源路由包、优化消息队列长度、设置最大内存共

享大小、Timewait数量、优化swap、最小化安装操作系统关闭无用软件服务和

端口等),另外OS级别的优化还可以根据业务类型将日志类、备份类的存储硬

盘与业务盘隔离划分,降低读写压力,提高存储的IOPS。

(2)中间件参数优化:主要是应用系统所运行的中间件环境,如Weblogic、Tomcat 等。选型方面在这里不对Weblogic和Tomcat进行详细对比,但大多情况下,

可以使用Tomcat对Weblogic进行替代(切身经验,一般更换起来不难),省

钱,维护且方便。以Tomcat为例,主要参数优化有:对线程池、最大线程数、

JVM、连接器方式(bio、nio 和apr,三种方式性能有差别,一般来说apr 的

性能相对最优)、日志优化(减少debug日志输出等)、日志切割(日志如未优

化切割,单文件较大,超过10几G时,写入读取会降低)等。

(3)数据库参数优化:在OS参数优化的前提下,对数据库参数进行优化,主要包括(以Oracle为例)sga、pga、shared_pool_size、db_cache_size、sort_area_size、

processes、session等。另外还需要对密码大小写、密码失效次数、动静态监听、

数据库备份等方面进行相应的优化设置。

实际上,技术方面的优化多在系统部署上线前进行的,与业务方面关系不是很大,切多为通用的最佳实践,按照相应的官方手册文档结合自身实际经验,大多可以调整优化为一个相对不错的环境。但在日常工作中,当出现性能问题的时候,很多人会选择优化硬件升级而忽略参数方面优化,导致硬件升级的成效不大,这一点是要额外注意的,须要通过操作系统、中间件和数据库等方面的参数优化,最大化、最合理的挖掘和使用硬件资源,为应用系统和数据提供最佳、最优运行环境。

二、业务优化

业务优化是指在业务人员和业务场景的配合下,提供相关技术手段对应用系统、数据库等进行优化,整个优化过程与业务逻辑规则联系密不可分。大致可以有:sql优化、代码优化、架构优化等几个方面。

1、sql优化

sql方面的优化除了监控数据库运行缓慢的sql对其进行索引优化外,还包括sql改写、hint函数等方面的优化。对sql进行监控(慢查询、AWR等)和优化索引(索引的添加、重建或删除等,索引的类型选择等)可以独立持续进行,但也要避免单表索引太多(单标超过

5个)、索引类型滥用(B-tree索引和位图索引)、索引失效未及时重建等情况。另外可以在开发的配合下,对慢sql进行优化改写、拆分以及hint函数(特别是并发函数/*+parallel(t,4)*/,但也注意不要滥用)的调试,这一块实际上在运行时间较久的传统企业核心系统上比较难以实现,正如对于运行的系统,对数据库的库、表设计方面的优化设计已难以实现。所以,大多sql层面的优化在索引优化处及截停。

2、代码优化

代码优化主要指在系统研发人员的主导配合下进行,包括两个方面的优化:一个是配合上述sql优化对代码中的sql进行优化改写,提高sql执行的效率,获得优化收益;另外一个是对代码中的逻辑架构进行优化,包括复杂逻辑架构拆分、串行业务并行执行、代码类型简洁等等。代码层面的优化如数据库的库表设计优化一样,就多数传统企业来说,在系统产品进行部署上线后,改变较难。

3、架构优化

架构优化包括两方面:业务架构优化和系统架构优化,是标本兼治的方法,但也正如前面所言,对于业务量和业务方向变化不大、且无明显可带来赢利创新的大多传统企业而言,架构优化应该是一种较为激进的做法,激进之处在于对传统企业的业务架构和系统架构进行了全面的推翻重构,尤其是在业务人员尚能接受系统缓慢、卡顿的前提下,对业务和系统进行大规模的优化和重构,大多会带来不稳定的因素。

如果剥离业务优化只是对系统架构方面进行优化,特别是盲目推崇微服务对传统企业进行重构变革的,大多可能会以失败告终。可能是由于自身几次工作经验和所处行业有关,对系统的架构优化、重构和升级多以保守、谨慎的态度,见过太多传统企业欲凭借IT进行业务重构,最终业务和技术双失败的案例。业务和系统是围绕企业健康发展相辅相成的两个紧密元素,任何一个方面的超速发展,都将对另一个方面造成重大的影响。

本着严谨的态度,如果要对架构(包括业务架构和系统架构)进行优化,那么有如下几个问题建议优先考虑清楚:

(1)此次架构优化或重构的目的是什么,要获得一个什么样的收益。即建议结果为导向,结果指导思路和方法。

(2)为完成此次架构的优化或重构,达到预定目标,优化或重构的方案时什么,需要投入的成本是多少,时间成本、人力成本、学习成本等。

(3)结合IT发展规律和生命周期,此次架构的优化或是重构,可以满足企业多久的发展需要。

(4)结合投入成本和预定目标,是否有一个科学、合理,对企业有益的投入产出比。

其实架构的优化重构也不是很难,在牛逼的业务专家配合下,理清各个业务逻辑和相互之间关系,再由研发工程师根据积木式的业务块进行服务化改造,为进一步降耦、提高系统并发,辅之以缓存、消息队列、前后端分离和动静分离等常规手段进行,一套分布式、服务化的架构也就基本完成了对经典单体应用的重构,如果后续业务变化较频繁,系统更新发布频率较高,还可以进一步完善微服务基础设施,如:配置中心、链路监控、基于Jenkins的持续发布以及容器化等。

综上所述,就大多传统企业核心系统优化的业务优化方面而言,除了在慢sql上加加索引外,其代码优化、架构优化等相对较为复杂、可执行性较低,且存在一定风险。实则,还有一种基于数据库方面的优化办法,该方法是在一定业务规则条件下,持续地保持生产数据“瘦身”,不断压缩生产数据库的数据量,达到在小数据量下的快速查询响应,具体如下:

相关文档
最新文档