微服务设计原则——高性能:池化

打印 上一主题 下一主题

主题 965|帖子 965|积分 2895

1.池化由来

池化(Pooling)是一种优化技术,旨在进步体系性能和资源使用率,特别是在高并发情况中。通过池化,体系可以重用资源,而不是每次都创建和销毁这些资源。
池化的目的是完成资源复用,制止资源重复创建、销毁来进步性能。
常见的池子有内存池、毗连池、线程池、对象池…
内存、毗连、线程、对象等都是资源,创建和销毁这些资源都有一个特征, 那就是会涉及到很多体系调用或者网络 IO。 每次都在请求中去创建这些资源,会增长处理惩罚耗时,但是假如我们用一个 容器(池) 把它们保存起来,下次需要的时间,直接拿出来使用,制止重复创建和销毁浪费的时间。
2.内存池

我们都知道,在 C/C++ 中分别使用 malloc/free 和 new/delete 进行内存的分配,其底层调用体系调用 sbrk/brk。频繁的体系调用分配开释内存不但影响性能还轻易造成内存碎片,内存池技术旨在解决这些题目。正是这些原因,C/C++ 中的内存操作并不是直接调用体系调用,而是已经实现了自己的一套内存管理,malloc 主要有三大实现:


  • ptmalloc:glibc 的实现。
  • tcmalloc:Google 的实现。
  • jemalloc:Facebook 的实现。
虽然尺度库的实现在操作体系内存管理的基础上再加了一层内存管理,但应用程序通常也会实现自己特定的内存池,如为了引用计数或者专门用于小对象分配。以是看起来内存管理一般分为三个条理。
3.线程池

线程池是一个预先创建并维护一定命目线程的集合。当有任务需要执行时,线程池会从池中取出一个空闲线程来执行任务,而不是每次都创建新线程。
线程创建是需要分配资源的,这存在一定的开销,假如一个任务就创建一个线程去处理惩罚,这一定会影响体系的性能。线程池的可以限制线程的创建数目并重复使用,从而进步体系的性能。
线程池可以分类或者分组,差别的任务使用差别的线程组,可以进行隔离以免互相影响。对于分类,可以分为核心和非核心,核心线程池一直存在不会被回收,非核心可能对空闲一段时间后的线程进行回收,从而节省体系资源,等需要时在按需创建放入池子中。
在 Java 中,可以使用 ExecutorService,在 Python 中可以使用 concurrent.futures.ThreadPoolExecutor。其他语言也有雷同的线程池实现。
  1. // Java 示例
  2. ExecutorService executor = Executors.newFixedThreadPool(10);
  3. executor.submit(() -> {
  4.     // 处理任务
  5. });
复制代码
4.毗连池

常用的毗连池有数据库毗连池、redis毗连池、TCP毗连池等等,其主要目的是通过复用来减少创建和开释毗连的开销。毗连池实现通常需要考虑以下几个题目:


  • 初始化:启动即初始化和惰性初始化。启动初始化可以减少一些加锁操作和需要时可直接使用,缺点是可能造成服务启动痴钝或者启动后没有任务处理惩罚,造成资源浪费。惰性初始化是真正有需要的时间再去创建,这种方式可能有助于减少资源占用,但是假如面对突发的任务请求,然后瞬间去创建一堆毗连,可能会造成体系相应慢或者相应失败,通常我们会接纳启动即初始化的方式。
  • 毗连数目:权衡所需的毗连数,毗连数太少则可能造成任务处理惩罚痴钝,太多不但使任务处理惩罚慢还会过分消耗体系资源。
  • 毗连取出:当毗连池已经无可用毗连时,是一直等候直到有可用毗连还是分配一个新的临时毗连。
  • 毗连放入:当毗连使用完毕且毗连池未满时,将毗连放入毗连池(包括毗连池已经无可用毗连时创建的临时毗连),否则关闭。
  • 毗连检测:长时间空闲毗连和失效毗连需要关闭并从毗连池移除。常用的检测方法有:使用时检测和定期检测。
5.对象池

严格来说,各种池都是对象池的的具体应用,包括前面先容的三种池。
对象池跟各种池一样,也是缓存一些对象从而制止大量创建同一个类型的对象,同时限制了实例的个数。如 Redis 中 0-9999 整数对象就通过对象池进行共享。在游戏开发中对象池经常使用,如进入地图时怪物和 NPC 的出现并不是每次都是重新创建,而是从对象池中取出。
在微服务中,使用对象池来管理缓存对象(如 Redis 缓存、内存缓存),可以进步缓存的服从。
6.小结

池化技术在微服务架构中通过进步资源的重用率,减少资源创建和销毁的开销,显著提升体系性能。线程池、毗连池、对象池等技术可以有用管理并发任务和资源,进步体系的相应速度和吞吐量。通过合理的池化策略和管理,微服务能够更高效地处理惩罚高并发负载,优化资源使用率。

参考文献

服务高并发、高性能、高可用实现方案- 杨岂

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表