程序三高的方法
Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.
目录
概述
程序三高的方法
需求:
设计思路
"程序三高"指的是代码复杂、耦合度高、难以维护的情况。 解决方法如下:
-
重构:通过重构
"程序三高"指的是代码复杂、耦合度高、难以维护的情况。 解决方法如下:
-
重构:通过重构,将复杂的代码结构进行简化,去除不必要的代码,同时优化代码的逻辑和结构。这将有助于减少代码的复杂性和耦合度,使代码更易于维护。
-
拆分模块:将复杂的模块分解成更小的模块,各个模块之间的关系明确,这有助于代码的复杂性和耦合度降低,同时方便维护。
-
使用设计模式: 设计模式是一些被广泛认可的最佳实践,这些实践可以帮助我们写出易于扩展、可维护、易于理解的代码。通过使用设计模式,可以将程序的耦合度降到最低。
-
代码审查:通过定期的代码审查,可以发现代码中的问题,避免复杂的代码影响程序可维护性,确保程序的质量和稳定性。
-
测试:进行充分的测试可以确保代码的质量和稳定性。测试用例覆盖率越高,程序的稳定性就越高,维护起来就越容易。
实现思路分析
1.1)高并发
高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一。当多个进程或线程同时(或着说在同一段时间内)访问同一资源时会产生并发问题,因此需要通过专门的设计来保证系统能够同时(并发)正确处理多个请求。
2)高性能
简单地说,高性能(High Performance)就是指程序处理速度快、耗能少。与性能相关的一些指标如下:
响应时间:系统对请求做出响应的时间。例如系统处理一个 HTTP 请求需要 200ms,这个 200ms 就是系统的响应时间。
吞吐量:单位时间内处理的请求数量。
TPS:每秒响应事务数。
并发用户数:同时承载能正常使用系统功能的用户数量。
高并发和高性能是紧密相关的,提高应用的性能,可以提高系统的并发能力。
应用性能优化时,对于计算密集型和 I/O 密集型还是有很大差别,需要分开来考虑。
水平扩展(Scale Out):只要增加服务器数量,就能线性扩充系统性能。通常增加服务器资源(CPU、内存、服务器数量),大部分时候是可以提高应用的并发能力和性能 (前提是应用能够支持多任务并行计算和多服务器分布式计算才行)。但水平扩展对系统架构设计是有要求的,难点在于:如何在架构各层进行可水平扩展的设计。
3)高可用
高可用性(High Availability)通常用来描述一个系统经过专门的设计,从而减少停工时间,保证服务的持续可用。
如高可用性集群就是保证业务连续性的有效解决方案。
缓存分类
1)本地缓存
使用进程内成员变量或者静态变量,适合简单的场景,不需要考虑缓存一致性、过期时间、清空策略等问题。
可以直接使用语言标准库内的容器来做存储。
2)分布式缓存
当缓存的数据量增大以后,单机不足以承载缓存服务时,就要考虑对缓存服务做水平扩展,引入缓存集群。
将数据分片后分散存储在不同机器中,如何决定每个数据分片存放在哪台机器呢?一般是采用一致性 Hash 算法,它能够保证在缓存集群动态调整,在不断增加或者减少机器时,客户端访问时依然能够根据 key 访问到数据。
常用的组件有 Memcache、 Redis Cluster 等,也可以在高性能内存存储 Redis 的基础上,提供分布式存储的解决方案
-
预处理与延后处理
-
池化
内存、连接、线程这些都是资源,创建线程、分配内存、数据库连接这些操作都有一个特征, 那就是创建和销毁过程都会涉及到很多系统调用或者网络 I/O,每次都在请求中去申请创建这些资源,就会增加请求处理耗时。如果我们用一个"容器(池)"把它们保存起来,下次需要的时候,直接拿出来使用,就可以避免重复创建和销毁所浪费的时间。
-
异步(回调)
对于处理耗时的任务,如果采用同步的方式,会增加任务耗时,降低系统并发度。此时可以通过将同步任务变为异步进行优化。
异步:服务员被问烦了,就在点完餐后给我们一个号码牌,每次准备好了就会在服务台叫号,这样我们就可以在被叫到的时候再去取餐,中途可以继续干自己的事。
- 消息队列
5.1 服务解耦
5.2 异步处理
5.3 流量削峰
5.4 总结
-
批量处理
在涉及到网络连接、I/O 等情况时,将操作批量进行处理能够有效提高系统的传输速率和吞吐量。
-
零拷贝
高性能的服务器应当避免不必要数据复制,特别是在用户空间和内核空间之间的数据复制。 比如 HTTP 静态服务器发送静态文件的时候,一般我们会这样写:
参考资料和推荐阅读
参考资料
官方文档
开源社区
博客文章
书籍推荐
欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~