首页 文章 精选 留言 我的

精选列表

搜索[AI产设研一体],共10000篇文章
优秀的个人博客,低调大师

dawdler-series 自研微服务架构发布 0.1.5-RELEASES 版

0.1.5 版本加入jdk25分支 对jdk25提供支持. 首页:https://dawdler.club gitee :https://gitee.com/srchen1987/dawdler-series https://gitee.com/srchen1987/dawdler-boot github:https://github.com/srchen1987/dawdler-serieshttps://github.com/srchen1987/dawdler-boot 与springcloud压测、打包、启动时间对比文章: 10 多倍的性能差距之 dawdler-series 对比 springCloud 性能测试过程 以下为项目介绍 dawdler-series dawdler-series 是一站式分布式应用、微服务架构的解决方案,其特点简单、高效(启动、运行速度快)、安全、灵活、可扩展性强. 功能包含webmvc架构、高性能分布式session、动态网关、验证架构(前后台通用表达式)、web拦截器、web监听器、服务过滤器、服务生命周期监听器、熔断器、链路追踪、健康检测、统一配置中心、分布式事务、支持读写分离的事务管理器、分库、分表、注册中心、服务间认证授权、高效的编译型aop、常用插件(schedule、cache、mybatis、dao、elasticsearch、redis、rabbitmq、kafka)。 dawdler-boot dawdler-boot使创建独立的、生产级的基于dawdler-series的应用程序变得更加容易,支持ide中main方法运行,也支持通过maven工具构建fastjar独立运行 直接嵌入dawdler-server、undertow、embed-tomcat(无需部署WAR文件和dawdler-server服务文件) 提供统一规范的依赖关系,以简化并规范您的依赖配置。

优秀的个人博客,低调大师

云风宣布开源基于 Lua 的自研游戏引擎 Ant Engine

知名游戏开发者云风昨天宣布开源游戏引擎 Ant Engine。 viahttps://twitter.com/cloudwu/status/1747509339752116544 云风表示其所在公司已批准 Ant Engine 的开源申请,仓库已对外开放,但现在尚未正式发布,文档、示例等均待在Wiki上逐步完善,游戏仓库将于年后公开。 viahttps://twitter.com/cloudwu/status/1746806038714818577 他还说道,Ant 引擎已经开发了 6 年,其团队使用这个引擎开发的游戏有一年历史,技术部分已经全部完成(游戏体验部分还需要调整),性能方面超出预期。 2017 年底,云风写下对这个新引擎最初的构想:是时候启动一个为移动设备设计的 3d 引擎项目了。 Ant 引擎专门针对移动平台打造,目前只有 iOS 版本完全可用(Mac 版本略有不足,Android 版本尚未完成)。引擎可以在 Windows 上运行,但缺乏一些和 PC 相关的支持(比如接入 Steam ,更好的键盘鼠标支持)。 云风介绍道:“在移动平台上,不光要保持帧率更要节省能耗。这会导致引擎结构设计上有所配合,这些是我们在设计时时刻考虑的方面。而且,ANT 区别于 Unity ,它尽可能地让开发工作随时保持在真实移动设备上运行,这对在移动设备上做出更好的交互体验,意义重大。” Ant 引擎基于 Lua 开发,有极低的理解成本,和极高的动态可定制性。云风表示:“以往基于 Lua 这类动态语言开发的基础设施中,最难解决是性能问题,而性能恰巧又已被 ANT 解决的相当不错。ANT 在手机上有极好的性能,我们用它开发的游戏,在极其复杂的场景下,iPhone 12 上依然可以小于每帧 10ms 的速度渲染。对于同等复杂度的场景,Unity 实现同等的效率将非常困难。” viahttps://twitter.com/cloudwu/status/1738183185257873464 Ant 引擎的技术特点:https://github.com/ejoy/ant/wiki/TechnicalFeatures Ant 引擎的虚拟文件系统:https://github.com/ejoy/ant/wiki/VFS Ant 引擎的包系统:https://github.com/ejoy/ant/wiki/Package 吴云洋(Cloud),网名云风,毕业于中南大学,原网易游戏核心成员、杭州研究中心总监,是网易《大话西游》、《梦幻西游》等游戏的重要开发者。2011年9月5日宣布已从网易辞职。此后联合创办的简悦科技为现阿里游戏的前身。具有丰富的程序开发经验,是开源爱好者、硬核游戏玩家。 云风 GitHub 主页:https://github.com/cloudwu

优秀的个人博客,低调大师

每日一博 | vivo 自研 Jenkins 资源调度系统设计与实践

作者:vivo 互联网服务器团队- Wu Qinghua 本文从目前业界实现Jenkins的高可用的实现方案,分析各方案的优缺点,引入vivo目前使用的Jenkins高可用方案,以及目前Jenkins资源的调度方案的设计实践和目前的落地运行效果。 一、前言 现在的企业很多都在用Jenkins做持续集成,各个业务端都依靠Jenkins,vivo Devops也是使用Jenkins来进行持续构建,部署Jenkins服务时如何保障服务的高可用变得尤为重要。 下面是目前Jenkins存在的一些问题。 Jenkins本身是单体的,即只能有一个Jenkins Master。虽然你也可以在多台机器上部署多个Jenkins Master,但这些Master之间没有联系,都是各自把任务交给手下的slaver去执行,没有任何交集。也许某个master下的slaver很忙,而另一个master下的slaver却很闲,资源得不到充分利用。 当其中一个slave宕机之后,该slave上的运行的job任务没有版本重新进行分配,需要用户重新执行。并且slave节点离线之后没有通知管理员。 当系统业务量比较大的时候业务请求集中在Jenkins Master上,会对Jenkins造成压力,甚至的造成Jenkins服务不可用。 当有job任务在jenkins Master上队列排队的时候,Jenkins Master宕机后,队列任务不可持久化。 Jenkins Workspace没有自动清理功能,会导致磁盘空间不足,任务执行不了的情况。 基于以上情况,vivo Devops对Jenkins的部署架构进行优化搭建,并且配套了一套Jenkins资源调度系统用于管理Jenkins资源。 二、业界实现 目前业界也包含一些Jenkins 高可用的设计方式,但是并不能完全的满足解决上述问题,比如: 2.1 方案一 Gearman + Jenkins 这是OpenStack团队使用的方案。这个方案使用了gearman, gearman是个任务分发框架。 需要在每个Master上安装好gearman的插件,并配置好能连接到gearman server,同时在每个Master必须建立相同的job。 之后运行任务的流程如下: gearman worker运行在各个Jenkins Master中等待gearman server分发任务; gearman client向gearman server发出运行job的请求; gearman server通知各个gearman worker有任务拉,第一个闲着的worker会接受任务,如果所有的worker都忙,则放入gearman的任务队列,得worker空闲时再分配; gearman worker闲下来后会从任务队列里取job来执行,执行完之后,将结果发回给gearman server; gearman server将结果返回给 gearman client。 优点: 这样各个salver资源可以得到充分利用,某个master挂掉另外的master可以继续服务。 弊端: 每个master的slave必须配置一致,否则会造成job调度错误,同时会造成一些资源的浪费。当一个master出现问题,该master的任务不会进行自动重新分配。 2.2 方案二 改造Jenkins的文件存储方式 目前Jenkins的配置文件都是直接在硬盘上以文件形式存储的,你在JENKINS_HOME的个文件夹下能看到各种.xml文件。有些公司在Jenkins上进行二次开发,将Jenkins的数据存储方式改为数据库存储,这样前端可以起多个Jenkins服务,后端连相同的数据库即可。数据库也有比较成熟的高可用方案。 优点: 可以达到Jenkins的高可用也就是某个master挂掉另外的master可以继续服务。 弊端: 需要对Jenkins进行二次开发,使用数据库会降低读取资源效率下降。 2.3方案三 最简单的Jenkins一主一备模式 平时让Jenkins A机器提供服务,并使用SCM Sync configuration plugin保存数据,JenkinsA机器修改配置后触发Jenkins B更新配置,一旦Jenkins A出现问题挂掉后,切换到备机Jenkins B上。 优点: 可以达到Jenkins的高可用,当master宕机后会进行切换到备机上。 弊端: 会有一批Jenkins备机存在资源浪费,切换master时间过长,会导致有段时间Jenkins服务不可用。 三、vivo Jenkins Scheduler系统目标 由于目前业界的一些实现还不能完全的满足我们目前的需求,所以我们进行了vivo jenkins scheduler系统的设计与实现。该系统需要达到如下的目的: 提升整个构建服务可靠性时长。保证jenkins集群的高可用,解决目前master-slave的单点问题,保证整个构建服务的可靠性时长。 降低灾难时服务恢复时长。①提供精准流控方式,在jenkins构建出现请求量过高的时候可以进行流控和持久化操作,减少对目前系统的冲击。②当系统压力减少后,放开流控可以快速的对堆积的请求进行分配执行。 有效分配任务至各个子节点,保证资源的有效利用。 能保证灾难时的及时切换任务至可用节点上,同时能快速的通知管理员进行处理。 能进行数据的可视化分析,能提供一系列帮助改善开发效率的视图,比如构建时长报表、构建量报表等。 四、 vivo Jenkins Scheduler设计 该系统我们从两大部分进行了设计,首先,我们不采用原生的Jenkins部署方案,而是采用全master的方式。第二,设计并开发了一套用于管理Jenkins集群的调度系统。 五、底层 Jenkins 工具部署方案 不采用目前单master的搭建方案,采用多master的搭建方案,master下不进行挂载slave机器,任务直接有master进行处理,master之间的关系、任务分配、离线、插件安装等由调度系统进行管理。这样由于vivo Jenkins Scheduler系统为高可用的,解决了目前Jenkins的单点问题。 六、系统架构图 七、系统说明 7.1 API-Gateway 主要提供系统的外部请求,网关系统,功能包含: 权限校验:校验用户发送集群管理系统的请求的权限。 智能路由:接收外部一切请求,并转发到后端的外服上去。 限流:与监控线程配合(当构建请求达到某个阈值时),进行限流操作。 API日志统一收集:类似于一个aspect切面,记录接口的进入和出去时的相关日志。 数据处理:对请求的参数进行数据的转换处理。 7.2 事件中心 是整个系统通信调用的主要模块,采用的是Spring的Event机制实现,主要核心事件如下: Jenkins注册事件(EVENT_REGIST_JENKINS):Jenkins启动后,通过自定的插件会向系统发送注册请求时,系统接收到后会触发Jenkins管理模块将Jenkins的信息注册至调度系统中。 Jenkins宕机事件(EVENT_DOWN_JENKINS) :监控管理轮询检查Jenkins状态,当发现有Jenkins宕机的情况会触发该事件,Jenkins管理模块处理将Jenkins的信息状态设置为不可用状态,从而是任务不能分配至该台jenkins。 任务从分配事件 (EVENT_JOB_REDO) :当Jenkins宕机后,如果该台jenkins上存在未执行完的任务时候,由job监控模块触发,job管理莫管处理,会对该Jenkins上未执行的job进行重新分配。 任务接受事件 (EVENT_JOB_RECIVE) :当job管理模块接受到创建请求,会触发该事件,由job管理模块放入Redis执行队列。 任务执行事件 (EVENT_JOB_EXECUTE) :job管理模块中的执行线程(10s执行一次,会从Redis队列中弹出任务),弹出任务后触发该事件,由调度中心选取合适的jenkins进行执行。 7.3 调度中心 是整个系统的核心模块,主要的功能是进行执行job时候能选取合适的jenkins进行处理任务,包含两个核心算法: 7.3.1 Jenkins分组算法 每台jenkins都可以使用标签的方式,打上多个标签,比如jenkins可以构建java程序,使用的构建工具可以是maven和gradle,这个时候我们就可以给其打上java、maven、gradle三个标签。 标签的维度主要有以下几个: 标签配置: 判断构建配置是否配置了标签,根据标签选择对应标签的Jenkins,比如配置了(docker等)。 构建语言: 根据构建配置的语言,比如Java、C++、Python、Go等。 构建工具和版本: 比如Maven、gradle、Ant,Cmark、Blade等。 JDK版本:比如JDK7、JDK8等。 Go语言版本:比如1.15.x.、1.16.x等。 GCC版本:如6.x、4.x等。 Python版本:2.x、3.x等。 是否存活:判断Jenkins是否存活,如果宕机直接过滤。 (可选策略)选择执行过该job的Jenkins,减少下载代码的过程:(第一次构建还是会比较慢,可以采用预执行的方式,在配置构建配置的时候,就预先执行一次,这样在用户执行的时候就使用该job执行过得workspace,减少代码下载的时间)。 (可选策略)根据job的构建的平均构建时长,如果构建时长达到某个配置阈值时,优先选择构建器空闲多的Jenkins进行执行,并指出Jenkins的锁定功能。其他的job不允许分配上来。 如果我们给Jenkins打上标签,那么我们就可以使用标签为维度将Jenkins进行分组,并且存入至Redis中缓存,方便后续选取Jenkins用来执行任务: 7.3.2 Jenkins选取算法 当Jenkins分组好了后,我们接受到执行的job的信息就可以使用Jenkins选取算法进行快速的选取合适的Jenkins进行处理job,如下图所示。 其中label子线程、语言子线程……就是我们上面的Jenkins分组的维度,有多少维度,那么这里就会有多少子线程处理。 构建任务进入主线程,然后主线程会按照分组维度分组操作并进行过滤,然后获取到每个分组中合适的Jenkins,再进行取交集(这个时候就获取到可以执行该构建任务的Jenkins了),在判断是否需要经过可选策略,最终得到Jenkins。 7.4 流控管理&队列管理 调度系统中的的任务接受采用的是队列的方式实现,当系统请求量达到阀后,系统将不会进入Redis队列,会将请求持久化至MySQL。后续如果有请求过来,job管理模块会检查数据库MySQL中是否有请求,如果有请求,会将请求放入Redis队列,如果没有请求就会将当前请求放入Redis队列,具体流程如下: 其中基于Redis实现的消息队列的时序图如下: 7.5 回调中心 该模块主要是监控任务的状态,当任务开始执行、中断执行、执行成功、执行失败的时候进行通知业务并存储数据,用于保存构建记录,方便后续数据的统计,用来完成数据的可视化。 八、实施效果 目前该系统已经投入生产环境运行,Jenkins任务已采用调度系统进行调度执行,运行稳定,运行效果。 九、后续展望 随着vivo Jenkins 调度系统的功能慢慢完善,Jenkins的机器也越来越多,目前还大多数运行在虚拟机上,从资源利用率和业务发布效率来看,未来的业务发布形态将会是以容器为主。目前公司也在大力发展k8s的容器生态建设, 所以我们希望将Jenkins工具后期进行容器化、池化,在提高资源利用率和发布效率的同时也可以为用户提供可靠的、简洁的、稳定调度执行。 END 猜你喜欢 100 行 shell 写个 Docker Dubbo 中 Zookeeper 注册中心原理分析 委派模式——从SLF4J说起 本文分享自微信公众号 - vivo互联网技术(vivoVMIC)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册