范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

回到单体架构一个开源项目的重构

  这个月,我和我的同事们正在开源一个内部的架构治理平台:ArchGuard,我们进行了一系列的遗留系统的迁移工作:
  从 Maven 到 Gradle。原因是灵活的自定义 task,还有自带的增量构建等。
  依赖库的更新。
  系统从微服务到单体。
  构建规范和对应的规范工具化
  持续交付。结合 GitHub Action、Docker Hub 等一系列的 DevOps 开源基础设施,进行全自动化的构建。
  ……
  其中,最有意思的一个故事莫过于:从微服务到单体架构。因为,它是一种反主流的形式,又或者是反主流的技术架构。
  遗留微服务系统的挑战
  在我们经过了一系列的内部会议之后,决定了将 ArchGuard 开源。随后,看到了代码库,我们发现了一系列的挑战:
  过多的服务/模块。这个在内部开发多年的系统,由多个微服务组成 + 代码库组成,
  知识缺少沉淀。先前并没有留下太多的开发文档,不了解当时做的一系列技术决策,需要从 Git 历史中汲取。
  复杂的部署架构。同样是工具,对比于 Jenkins/Sonarqube 的部署方式,相对较为复杂。
  不一定合理的服务划分。我们需要部署一系列的服务,但是只有扫描器(Arch Scanner)才需要弹性伸缩这样的特性。
  于是呢,我们重新思考合理的后端服务(微服务)的颗粒度应该是怎样的?所以,参考于过去总结的什么用微服务?以及有多少个微服务更合理?先前的一个结论,类似于:
  微服务的数量不超过开发人员的数量。
  满足康威定律。微服务与开发团队对齐。
  两个比萨团队原则 —— 开发团队的人员数量维护在 3 ~ 12 人。一个微服务只由一个开发团队维护。
  高内聚,低耦合。单个服务与其它服务依赖少。如:两个服务存在相互调用,耦合度相对较高,可以考虑合为一个服务。
  收益大于开销。创建服务的开销是否超过了独立成服务的好处。
  你不一定需要微服务。考虑采用 DDD (领域驱动设计)分层架构来划分,以方便未来拆分为微服务。
  在这个场景之下,几乎违反了上面的一系列规则。所以,我就回到了上述的 6 中去,采用 DDD 的分层架构模式。每个资源/聚合/服务在各自的包下管理(common 除外):
  Application.kt
  clazz
  code
  common
  config
  evaluation_bak
  evolution
  method
  metrics
  module
  packages
  qualitygate
  report
  report_bak
  scanner
  scanner2
  system_info
  由于是合并的代码,所以代码中除在于 _bak还有scanner2这样看似重复,又或者是迁移中的代码。
  为什么单体更适合当前?
  再回到多年以前, Martin Fowler 写了那篇《Monolithic First》,意在告诉人们在团队微服务能力和技术不够成熟的时候,你不应该采用微服务。这里的场景和上述的这个场景并不是一样的。对于系统的最终形态来说,单体并不一定适合这个系统,但是当于当前的我们来说,单体是最合适的。原因诸如于:
  单体部署架构决定应用架构。使用 Docker,尽管 Saas 也是更友好的。但是,作为一个刚起步的开源项目,并不会资金来支撑这种规模的 SaaS 服务。
  最终用户是开发者。软件的使用者本身又可能成为开发者,所以能一次启动就应该一次启动。
  开发者体验优先。开源与面向开发者决定了 ArchGuard 是一个开发者体验优先的系统。如果一个参与到 ArchGuard 项目的开发者,要在多个项目中切换, 那么这中体验是非常差的。在开源社区里,一直都是单体优先,如 Gradle、Spring 等。
  首次部署速度。
  setup 速度。
  总体来说,作为一个开源应用/工具,软件工程的模式受限于其合作模式。所以,常规的软件开发架构,并不一定适用,我们需要一些更好的模式。
  那么,我们还有别的选择吗?
  我们的目标架构是单体吗?
  从某种意义上,就当前来说,它是的。但是,如果管理有所不善的话,它会变成一个大泥球架构。回顾一下,一个多仓库/多模块的微服务系统,它与一个单体系统在物理形态上的主要区别在于:
  微服务使用的是进程间调用,单体是进程内调用。
  微服务最终有多个制品包,而单体只有一个或者是插件化的一带多。
  所以,只要我们用相似的形态来构建一个单体应用,那么它在部署形态上就可以变成是微服务架构。简单来说,就是:
  代码库内,包(package、service)间的调用使用 HTTP 调用,而不是函数调用。
  通过自定义的构建脚本,在构建时拆分代码库,生成多个服务制品,并进行部署。
  从结果来说,便是将系统放置在一种临界状态。以让人们根据自己的需要,做出不同的选择。如在 SaaS 化的时候,这就可以变成微服务的形态,单体部署时,则可以变成单体的状态。唯一麻烦的是,需要开发者对于构建系统有足够的了解,并设计好充足的自动化测试设施。
  如何迁移 ?
  接着,我们就开始合并多个代码仓库,其中的一些
  保留历史提交记录的合并。主要是结合 git-filer-repo 来进行过滤和选择路径。
  构建配置的全集。对 Application.properties 等进行统一。
  使用相同的依赖版本。由于不同的年代的原因,所以选择的依赖版本也有所不同,需要尝试先统一,才能合并代码。
  解决冲突。因为,只合并了 src 目录下的内容,如果包名有问题,如冲突了,需要重置。类似的问题,还有:Application 重复、Bean 冲突、Service 冲突。
  就迁移过程来说,它并不复杂,就是耗时。
  还有其它选项吗?
  相似的场景,如果一个开发人员多个微服务,并且在不考虑单机部署的情况下,Monorepo 是一个更好的选择,把所有微服务项目的代码放在一个仓库里。
  毕竟,Google 都可以把所有的代码仓库放一起,我们又有什么不可以的。当然了,Google 使用的技术原理是不一样的。不过,它能提供一个足够强壮的理由。
  其它
  回过头来看,对于小的团队来说,单体会不会是更合适的选择?那么大的团队呢?

双11双12玩法出炉!两大爆发神器来了,5亿补贴究竟流向哪里?大促不仅是品牌商家的战场,也是中小商家的舞台。今年双11双12期间,淘宝计划推出5亿补贴策略,扶持中小及特色卖家。对消费者来说,双11买东西便宜已经成为共识,尤其到了910月份,看靠老婆起家,靠运营赚钱,80后老板躺着挣钱文吴鹤鸣编辑范婷婷几年前,因为老婆随手发的一条视频火了,赵威干脆转行做起童装。靠着视频种草引流,夫妻俩打出了一个梦幻开局。为了方便生意,他们从义乌转战童装产业带湖州市织里镇,创业3红米note7发布啦Redmi真香!这次雷军发布了红米note7,看起来还是可以的,处理器方面终于不是625了,这次是满血版660,还搭配了4000毫安大电池,还有红外线和USBC快充,4800万的超小米8和我那些事最近小编入手了一个手机,那就是小米8,首先呢,我觉得它的颜值还不错。就是可惜了刘海,如果他的刘海再小点可能会更好看点,和其他手机相比较的话,其他手机的价格都在30004000之间,揣2000万不买房去创业?小夫妻差点亏个底朝天,如今像身后有老虎追赶一样狂奔。文姜雪芬编辑范婷婷易子涵之前总是在想一个哲学问题人为什么要活着?为了寻找答案,22岁那年,她去了印度,边工作边修行,爱上了瑜伽。四年时间,她跑遍了印度大大他让南方人放下暖气执念,2000块实现暖气自由真冷啊!文易琬玉编辑范婷婷寒露后,一股中等强度的冷空气自西向东影响了我国的中东部地区,北方冷上加冷,南方不少地方也经历换季式降温,一夜入秋。和天气预报一样敏锐地感知着天气变化的,还从800元到1200万,攒一年私房钱也要买,他靠什么吸引男玩家男人至死是少年。文吴鹤鸣编辑范婷婷凌晨3点,林川涛被一通电话吵醒,他没有理会,按了静音转身继续睡。对方没有放弃,马上又打来第二通电话,林川涛心里不爽,憋着股气接起电话。老板,对不起他们把赊账研究透了能备货,能拓客,现在还能打怪升级赊账不难,资金不断。文易琬玉编辑范婷婷没抵押贷款过的人,不足以说创过业。在老板界,几乎都有这样的调侃,表面上被别人喊老板很风光,其实背地里总是提心吊胆。尤其是每到大促的时候,除了备秋招笔试经第三弹华为硬件逻辑岗接上一次华为题的2道,接下来是第34道3只读存储器ROM中的内容,当电源断掉后又接通,存储器中的内容()。(华为硬件逻辑实习岗)A全部为0B不可预料C保持不变D全部改变解析考察数字今日立春,老北京吃春饼的习俗最早源自何时呢?今朝立春好天气况是太平朝野时这两句诗出自元代文学家书法家杨维祯的广群芳谱。天时谱,说明我国的古人就对立春的重视。今天2月3日正好是立春,比去年的立春2月4日早了一天。立春有吃春饼炒二十三,过小年,家家户户祭灶王,海淀区灶君庙和灶王有何关系?二十三,糖瓜粘,今天就是传统的小年了,也是传统的老北京家家祭灶的一天,从今天开始,就开启了过年的节奏。一盏清茶一缕烟,灶王老爷上青天。玉皇若问人间事,切莫乱说糖瓜粘。灶王爷,也叫灶
此国产耳机品牌虽小众但很牛,它对销量的态度就如这耳机调音一样在我看来,耳机的声音有两种,一种是你一听就中毒的,典型的是暴利解析或者动次打次的低频。另一种则是需要你静静的品味,包括器材的搭配。估摸着还有人说还有第三种,那就是一耳朵觉得垃圾的。新华网公开点名批评特斯拉回应质疑不能态度傲慢针对近日特斯拉面对新车充电趴窝的甩锅国家电网的行为,新华网进行了公开点名批评回应消费者的质疑,不能轻描淡写,更不能态度傲慢。新华网在文章中表示,新能源汽车市场百花齐放,车企对待消费这个女人让76岁任正非低头向员工道歉!换做你会怎么办?全文导读今年76岁的任正非作为华为公司创始人,本可以安享晚年的,但却因为公司及家庭的事儿不能清闲下来。而这其中最让任老头疼的就是小女儿姚安娜。任正非为姚安娜向华为员工道歉上了热搜,恒大汽车恒驰7谍照曝光,拉动股价上涨2。4,但距离高点仍跌去9成自从恒大宣布造车以来,就一直处于雷声大雨点小的状态,从2020年8月至今,恒大一共公开了9款概念车型,但量产和上市却迟迟没有动作。恒大汽车2021年中期业绩公告显示,上半年恒大汽车兼顾跑车性能与轿车实用性,奥迪A5Sportback诠释极致生活态度作为最受欢迎的入门级轿跑,奥迪A5的中期改款备受个性张扬的年轻人期待。最终这款大众DreamCar也确实没有令人失望,采用全新家族设计语言的奥迪A5Sportback颜值出众,引起被特斯拉和中国车企双面夹击的欧洲市场,新能源汽车需求飞速提升根据目前欧盟禁售燃油车的时间表,留给传统燃油车的时间仅剩下不到15年的时间,并且在现在的大环境之下,在未来,各大车企们还会面临着更加严格的碳排放监管,因此各大车企也就开始了新能源汽更懂国人需求的平板电脑,小米平板5凭借这几点完胜iPad其实安卓系统的平板电脑一直以来都被消费者戴着有色眼镜来看待,因为生态和功能方面的缺陷,导致使用体验很一般,大多数用户在选择平板电脑时都会把目光放在iPad上,安卓平板则一直被调侃为4K8K电视距离普通老百姓的客厅还有多远?4K8K电视距离普通老百姓的客厅还有多远?相信从电视整机厂商内容提供方到普通老百姓,大家心里都有自己的答案。作为在一个8年里面,参与了多款超高清显示芯片(ASICSOC)的设计,一Flink基础(一)之DS简介(1)有状态的流式处理简介0简介ApacheFlink是一个分布式流处理器,具有直观和富有表现力的API,可实现有状态的流处理应用程序。它以容错的方式有效地大规模运行这些应用程序。Flink于2014年4月Flink操练(十一)之DS简介(11)基于时间和窗口的操作符(三)1基于时间的双流Join数据流操作的另一个常见需求是对两条数据流中的事件进行联结(connect)或Join。FlinkDataStreamAPI中内置有两个可以根据时间条件对数据Flink操练(九)之DS简介(9)基于时间和窗口的操作符(一)在本章,我们将要学习DataStreamAPI中处理时间和基于时间的操作符,例如窗口操作符。首先,我们会学习如何定义时间属性,时间戳和水位线。然后我们将会学习底层操作process