性能优化一般来讲有三个层次:
● 系统层次
● 算法层次
● 代码层次
性能优化一般遵循如下几个规则:
【
规则
1】不要一味地追求程序的效率,应当在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率。
【
规则
2】以提高程序的全局效率为主,提高局部效率为辅。
【
规则
3】在优化程序的效率时,应当先找出限制效率的“瓶颈”,不要在无关紧要之处优化。
【
规则
4】先优化系统架构,再优化数据结构和算法,再优化执行代码。
【
规则
5】有时候时间效率和空间效率可能对立,此时应当分析那个更重要,作出适当的折衷。例如多花费一些内存来提高性能。
【
规则
6】不要追求紧凑的代码,紧凑的代码并不一定能产生高效的机器码。
常见的系统层次的优化有如下方法:
•集群与负载均衡
•读写分离、分表分库
•消息总线
•动静分离
•CDN
•Nosql、缓存
接下来讲讲支付平台的系统优化:
•集群与负载均衡
我们采用的微服务方式来实现,所有的微服务我们都是无状态的,都是可以横向扩展的,无单点故障。这样单台机器出问题基本不会影响,如果系统并发量上去后我们可以及时的去扩容。
•读写分离、分表分库
支付数据根据不同业务线来分库,一个业务线一个数据库,这样的话减少了数据库层面的压力。
•消息总线
消息总线的好处多多,首先流程异步化,调用者发送消息即可,无需等待消息处理完毕,其次可以有效削峰,降低服务器压力。结算完成流程我们就是采用的消息总线方式,结算完成后交易系统推送结算完成消息给清算系统,清算系统再去更新用户余额。
•动静分离
所谓的动静分离,就是将 Web 应用程序中静态和动态的内容分别放在不同的 Web 服务器上,有针对性的处理动态和静态内容,从而达到性能的提升。
•CDN
所谓的 CDN,就是一种内容分发网络,它采用智能路由和流量管理技术,及时发现能够给访问者提供最快响应的加速节点,并将访问者的请求导向到该加速节点,由该加速节点提供内容服务。利用内容分发与复制机制,CDN 客户不需要改动原来的网站结构,只需修改少量的 DNS 配置,就可以加速网络的响应速度。
•Nosql、缓存
常见的场景都是读比写的数量大很多,这时候我们可以使用缓存,如果缓存中有数据直接从缓存中取数据,缓存中没数据时才从数据库中读取。我们这边不管交易数据还是订单数据,都用到了redis缓存来提高性能。对于数据量非常大的对账信息,我们采用hbase来存储。