Mi código abierto 2022, de 0 a 2.7k estrellas

Resumamos brevemente el grupo de subprocesos dinámicos DynamicTp en 2022. El código central de DynamicTp fue escrito por mí en los primeros tres días del día de Año Nuevo en 2022. ¿Por qué escribí este proyecto en ese momento?

Principalmente por las siguientes razones:

  1. También me he alojado en Meituan antes, y sé desde hace mucho tiempo que existe una herramienta como un grupo de subprocesos dinámicos dentro

  2. En mi desarrollo diario, los servicios responsables utilizarán el grupo de subprocesos sin excepción.

  3. Cualquiera que haya usado el grupo de subprocesos sabe que esos parámetros básicos son realmente difíciles de determinar y se requiere mucha modificación, liberación y verificación de este trabajo.

  4. La operación del grupo de subprocesos es una caja negra para el desarrollo, el estado de la operación no se puede detectar a tiempo y hay una falta de funciones de monitoreo y alarma.

  5. Todo el mundo tiene estos puntos débiles. Para hacer un mejor uso del conjunto de subprocesos, planeo construir una rueda de conjunto de subprocesos dinámica para facilitarme a mí y a los demás.

Esta es la razón general por la que este proyecto fue escrito en primer lugar.

Los programadores no solo necesitan completar CRUD en el trabajo, sino que también deben tener el coraje de descubrir y resolver los puntos débiles. Aunque esto suene aburrido, en realidad es bastante interesante invertir en él.

Antes de escribir, se determina la idea de implementación de DynamicTp y las funciones que deben proporcionarse.

  1. Debe ser lo más liviano posible para reducir la complejidad de acceso y uso, así que elija combinarlo con el centro de configuración

  2. Debe tener la capacidad de ajustar dinámicamente los parámetros del grupo de subprocesos, en función de la actualización activa en tiempo real del centro de configuración para completar

  3. Se requiere una función de monitoreo para recopilar varios indicadores durante el proceso de ejecución del conjunto de subprocesos, combinado con herramientas de monitoreo como Prometheus+Grafana para crear un mercado visualizado.

  4. Se requiere una función de notificación y alarma para enviar una alarma a tiempo cuando la cantidad de tareas rechazadas, el uso de la cola, la cantidad de tareas de tiempo extra, la actividad del grupo de subprocesos, etc. alcancen el umbral configurado.

  5. Adáptese al grupo de subprocesos internos del middleware de terceros de uso común. Cuando se inicie el servicio, obtenga el objeto del grupo de subprocesos y transfiéralo a DynamicTp para su administración.

Todo el proyecto también se desarrolla en torno a estas cuatro funciones básicas.

La pregunta más común que hacen muchos amigos que me agregan vx para chatear conmigo es que quieren aprender el próximo proyecto, pero no saben por dónde empezar.

De hecho, lo que quiero decir es que si quieres aprender algo, primero debes entender qué problema está tratando de resolver. ¿Cuál es la función central? Las ideas del autor generalmente se desarrollan en torno a estas funciones básicas y se perfeccionan paso a paso en un gran proyecto. Debe haber más de una función central, y habrá más de una. Puede elegir comenzar con la que le interesa, ver cómo es todo el flujo de datos y el enlace de la llamada, y omitir algunos detalles según corresponda. De esta manera, cuanto más lo mires, más lo sentirás gradualmente y podrás conectarlo entre sí.

也有一些小伙伴会咨询我说怎么做开源,其实开源这个东西大家千万别把它想的多高大上。跟你日常的业务开发也差不多,业务需求是产品提的,需要解决一类问题,一般是它驱的、有偿的。开源项目本质上来说也是需要解决一类问题,需求需要自己寻找,可以找自己日常开发中的一些痛点,是自驱的、用爱发电的。做开源就需要牺牲自己大量的业余时间,上班时间还是要认认真真做公司的事儿,像我一般都是周末或者晚上下班回家抽时间弄下开源的,带点热爱参与开源可能会走的更远。不要急功求成,做开源本身也是对自己的一种能力提升,项目火不火可以不用那么看重,相信是金子总会发光的。

DynamicTp 从去年一月开源到现在共收获了 2.8k 的 stars,740+forks,30+贡献者,600+群友,感谢一年来支持我们的人。

  1. 1 月项目开源,感谢@铂赛东,东哥在项目初期给我做了一波推广,项目 star 达到近 100

  2. 2 月美团动态线程池实践思路,开源了该篇文章在掘金平台火了,长时间霸榜第一,给了项目巨大的流量支持,项目总 star 数达到近 600,可能项目的很多关注者都是从掘金平台来的吧,这里非常感谢掘金平台给的机会

  3. 3 月发布第一个可用版本 1.0.2,3y 的 austin 项目也接入使用,功能特性持续贡献,感谢@Redick01,辉哥参与贡献了很多新特性

  4. 4 月项目将项目捐赠到了 Dromara 社区,为了更好的发展,基于社区来传播,让更多人接触到 DynamicTp

  5. 5 - 12 月,项目特性持续更新,更多小伙伴参与贡献,项目稳定性也越来越高,相继发布 1.0.8 里程碑版本及最新版本 1.0.9,年后预计发布 1.1.0 版本,适配了更多第三方中间件。非常感谢给 DynamicTp 贡献代码及 idea 的小伙伴们

也感谢那些自发帮 DynamicTp 推文的号主们,JavaGuide、Java3y、架构师社区、石衫的架构笔记、架构师成长指南、元人部落、涛歌依旧、java1234、苏三说技术、小哈学 java、java 学思等等。

经过多个版本的迭代,目前最新版本 v1.0.9 具有以下特性

  • 代码零侵入:我们改变了线程池以往的使用姿势,所有配置均放在配置中心,服务启动时会从配置中心拉取配置生成线程池对象放到 Spring 容器中,使用时直接从 Spring 容器中获取,对业务代码零侵入

  • 通知告警:提供多种报警维度(配置变更通知、活性报警、容量阈值报警、拒绝触发报警、任务执行或等待超时报警),已支持企业微信、钉钉、飞书、邮件报警,同时提供 SPI 接口可自定义扩展实现

  • 运行监控:定时采集线程池指标数据,支持通过 MicroMeter、JsonLog 日志输出、Endpoint 三种方式,可通过 SPI 接口自定义扩展实现

  • 任务增强:提供任务包装功能,实现 TaskWrapper 接口即可,如 MdcTaskWrapper、TtlTaskWrapper、SwTraceTaskWrapper,可以支持线程池上下文信息传递

  • 多配置中心支持:基于主流配置中心实现线程池参数动态调整,实时生效,已支持 Nacos、Apollo、Zookeeper、Consul、Etcd,同时也提供 SPI 接口可自定义扩展实现

  • 中间件线程池管理:集成管理常用第三方组件的线程池,已集成 Tomcat、Jetty、Undertow、Dubbo、RocketMq、Hystrix、Grpc、Motan、Okhttp3、Brpc、Tars、SofaRpc 等组件的线程池管理(调参、监控报警)

  • 轻量简单:基于 SpringBoot 实现,引入 starter,接入只需简单 4 步就可完成,顺利 3 分钟搞定

  • 多模式:参考 Tomcat 线程池提供了 IO 密集型场景使用的 EagerDtpExecutor 线程池

  • 兼容性:JUC 普通线程池和 Spring 中的 ThreadPoolTaskExecutor 也可以被框架监控,@Bean 定义时加 @DynamicTp 注解即可

  • 可靠性:框架提供的线程池实现 Spring 生命周期方法,可以在 Spring 容器关闭前尽可能多的处理队列中的任务

  • 高可扩展:框架核心功能都提供 SPI 接口供用户自定义个性化实现(配置中心、配置文件解析、通知告警、监控数据采集、任务包装等等)

  • 线上大规模应用:参考美团线程池实践,美团内部已经有该理论成熟的应用经验

技术架构

最后,欢迎大家了解试用 DynamicTp。

官网dynamictp.cn

gitee 地址gitee.com/dromara/dyn…

github 地址github.com/dromara/dyn…

「回顾2022,展望2023,我正在参与2022年终总结征文大赛活动

Supongo que te gusta

Origin juejin.im/post/7189878373542281274
Recomendado
Clasificación