当前位置: 首页 > news >正文

网站建设 技术支持 阿里江苏省建设银行网站

网站建设 技术支持 阿里,江苏省建设银行网站,企业门户网站建设方案后台管理,不懂网站建设 如何找建站公司历史总会重演。一切刚过去的#xff0c;又会被重新提起。开源项目Codename One的联合创始人Shai#xff0c;曾是Sun Microsystems开源LWUIT项目的共同作者#xff0c;参与了无数开源项目。作为最早一批Java开发者#xff0c;最近感慨道#xff1a;单体#xff0c;又回来了…历史总会重演。一切刚过去的又会被重新提起。开源项目Codename One的联合创始人Shai曾是Sun Microsystems开源LWUIT项目的共同作者参与了无数开源项目。作为最早一批Java开发者最近感慨道单体又回来了 Shai说道我已经在这个圈子里很久时间了看到了一次次被抛弃、被重新发现的想法超越“时髦词汇”并凯旋而归。 他进一步举例“近年来SQL也挣扎过后死而复生。我们再次热爱关系数据库。我认为单体架构将再次迎来奇幻之旅。微服务和无服务器是云供应商推动的趋势目的当然是在向我们兜售更多的云计算资源。然而对于大多数用例来说微服务在财务上意义不大。是的供应商当然也可以降低成本。但当他们扩大规模时他们会以股息来覆盖掉成本。单是可观测性成本的增加就让‘大型云’供应商的腰包鼓起来了” 作为从业近30年的资深技术大神为何做此感叹本文通过一场“利用模块降低架构成本”的探讨帮助大家梳理现在的架构设计难题希望对诸君有所启发。 1、问题背景 我最近领导了一个会议小组讨论了微服务与单体服务的主题。组内认为单块的规模不如微服务。这对于亚马逊、eBay等所取代的那些庞然大物来说可能是正确的。这些确实是巨大的代码库其中的每一次修改都是痛苦的而且它们的扩展都是具有挑战性的。但这不是一个公平的比较。较新的方法通常优于旧的方法。但如果我们用更新的工具构建一个整体我们会得到更好的可扩展性吗它的局限性是什么现代的单体也称巨石到底该是什么样子 2、单体回归范例Modulith Spring Modulith是一个模块化的单体结构可以让我们使用动态隔离件构建单体结构。通过这种方法我们可以分离测试、开发、文档和依赖项。这有助于微服务开发的独立方面而所涉及的开销很少。它消除了远程调用和功能复制存储、身份验证等的开销。 Spring Modulith不是基于Java平台模块化Jigsaw。他们在测试期间和运行时强制分离这是一个常规的Spring Boot项目。它有一些额外的运行时功能可以实现模块化的可观测性但它主要是“最佳实践”的执行者。这种分离的价值超出了我们通常使用微服务的价值但也有一些权衡。 举个例子传统的Spring monolith将采用分层架构其包如下 com.debugagent.myapp com.debugagent.myapp.services com.debugagent.myapp.db com.debugagent.myapp.rest 这很有价值因为它可以帮助我们避免层之间的依赖关系例如DB层不应依赖于服务层。我们可以使用这样的模块并有效地将依赖关系图推向一个方向向下。但随着我们的成长这没有多大意义。每一层都将充满业务逻辑类和数据库复杂性。 有了Modulith我们的架构看起来更像这样 com.debugagent.myapp.customers com.debugagent.myapp.customers.services com.debugagent.myapp.customers.db com.debugagent.myapp.customers.restcom.debugagent.myapp.invoicing com.debugagent.myapp.invoicing.services com.debugagent.myapp.invoicing.db com.debugagent.myapp.invoicing.restcom.debugagent.myapp.hr com.debugagent.myapp.hr.services com.debugagent.myapp.hr.db com.debugagent.myapp.hr.rest 这看起来非常接近一个合适的微服务架构。我们根据业务逻辑分离了所有部分。在这里可以更好地控制交叉依赖关系团队可以专注于自己的孤立区域而不必互相踩脚。这是微服务的价值之一且没有开销。 我们可以使用注释进一步深入地和声明性地实现分离。我们可以定义哪个模块使用哪个并强制单向依赖关系因此人力资源模块将与发票无关。客户模块也不会。我们可以在客户和发票之间建立单向关系并使用事件进行反馈。Modulith中的事件是简单、快速和事务性的。它们消除了模块之间的依赖关系无需麻烦。这可以用微服务实现但很难实现。比如开票需要向不同的模块公开接口。如何防止客户使用该界面 有了模块我们就可以做到。对用户可以更改代码并提供访问权限但这需要经过代码审查这会带来自己的问题。请注意对于模块我们仍然可以依赖常见的微服务如功能标志、消息传递系统等。您可以在文档和Nicolas Fränkel的博客中阅读有关Spring Modulith的更多信息。 模块系统中的每个依赖项都被映射并记录在代码中。Spring实现包括使用方便的最新图表自动记录所有内容的能力。你可能会认为依赖性是Terraform的原因。对于这样的“高级”设计来说这是正确的地方吗 对于Modulith部署像Terraform这样的基础设施即代码IaC解决方案仍然存在但它们会简单得多。问题是责任的划分。正如下图所展示微服务并没有消除整体结构的复杂性。我们只把“难啃的骨头”踢给了DevOps团队。更糟糕的是我们没有给他们正确的工具来理解这种复杂性所以他们不得不从外部管理。 这就是为什么我们行业的基础设施成本在上升而传统行业的基础设施价格却在下降。当DevOps团队遇到问题时他们会投入资源。这显然不是正确的做法。 3、其他模块 我们可以使用标准Java平台模块Jigsaw来构建Spring Boot应用程序。这样做的好处是可以分解应用程序和标准Java语法但有时可能会很尴尬。当使用外部库或将一些工作拆分为通用工具时可能会更有效。 另一个选项是Maven中的模块系统。这个系统允许我们将构建分解为多个单独的项目。这是一个非常方便的过程可以让我们省去大量项目的麻烦。每个项目都是独立的易于使用。它可以使用自己的构建过程。然后当我们构建主项目时这些全部都变成了一个单体。在某种程度上这才是我们真正想要的。 4、单体架构扩展有解吗 可以使用大多数微服务扩展工具来扩展我们的单体们。许多与扩展和集群相关的开发都是在单体架构的情况下进行的。这是一个更简单的过程因为只有一个移动部分应用程序。我们复制其他实例并观察它们。没有哪项服务是失败的。我们有细粒度的性能工具所有的功能都可以作为一个统一的版本。 我认为扩展单体为微服务比直接构建微服务更简单—— 我们可以使用分析工具并获得瓶颈的合理近似值。我们的团队可以轻松地并且经济实惠地设置运行测试的登台环境。我们拥有整个系统及其依赖关系的单一视图。我们可以单独测试单个模块并验证性能假设。 跟踪和可观测性工具非常棒。但它们也会影响生产有时还会产生噪音。当我们试图解决伸缩瓶颈或性能问题时这些工具可能会让设计者踩一些坑。 我们可以将Kubernetes与monolits一起使用就像将其与微服务一起使用一样有效。镜像尺寸会更大如果我们使用GraalVM这样的工具则可能不会太大。有了这一点我们可以跨区域复制monolith 并提供与微服务相同的故障转移行为。相当多的开发人员将monolics部署到Lambdas。笔者不太喜欢这种方法因为非常昂贵。 5、单体的瓶颈问题有解 但仍有一点是巨大的障碍数据库。由于微服务固有地具有多个独立的数据库因此它们实现了巨大的规模。单体架构通常与单个数据存储一起工作。这通常是应用程序的真正瓶颈。有多种方法可以扩展现代数据库。集群和分布式缓存是强大的工具可以让我们达到在微服务架构中很难达到的性能水平。 在一个单体结构中也并不需要单个数据库。例如在使用Redis进行缓存时选择使用SQL数据库也是很常见的事情。但我们也可以为时间序列或空间数据使用单独的数据库。我们也可以使用单独的数据库来提高性能尽管根据笔者经验这种情况从未发生过。将数据保存在同一数据库中的好处是巨大的。 6、回归单体的好处 事实上这样做有一个惊人的好处我们可以在不依赖“最终一致性”的情况下完成交易。当我们尝试调试和复制分布式系统时可能会遇到一个很难在本地复制的过渡状态甚至很难通过查看可观测性数据来完全理解。 原始性能消除了大量网络开销。通过适当调整的二级缓存我们可以进一步删除80-90%的读IO。在微服务中要实现这一点要困难得多而且可能不会删除网络调用的开销。 正如我之前提到的应用程序的复杂性在微服务架构中不会消失。我们只是把它搬到了另一个地方。所以从这个层面讲微服务并不算真正的进步因为在此过程中平白添加了许多移动部件增加了整体复杂性。因此回归更智能、更简单的统一架构更有意义。 7、再看微服务的卖点 编程语言的选择是微服务亲和力的首要指标之一。微服务的兴起与Python和JavaScript的兴起相关。这两种语言非常适合小型应用程序对于较大型的应用就不太适用了。 Kubernetes使得扩展此类部署相对容易因此为已经增长的趋势增添了动力。微服务也有一些相对快速的升降能力。这可以以更细粒度的方式控制成本。在这方面微服务被出售给组织作为降低成本的一种方式。 这并非完全没有优点。如果以前的服务器部署需要强大昂贵的服务器那么这一论点可能有一定道理。这可能适用于极端使用的情况比如突然面临非常高的负载但随后没有堵塞。在这些情况下可以从托管的Kubernetes提供商动态廉价获取资源。 微服务的主要卖点之一是组织调度方面。这使得各个敏捷团队能够在不完全了解“大局”的情况下解决小问题。问题也在于此这就会创造一种“单干”文化让每个团队都“自己做自己的事情”。在缩减规模的过程中尤其是在代码“腐烂”的情况下问题更甚。系统可能仍能工作数年但实际上无法维护。 8、互联网建立在单体之上 为什么要离开呢 笔者组内中的一个共识是我们应该始终从单体开始。它更容易构建如果我们选择使用微服务我们可以稍后将单体分解。 提及具体某个软件相关的复杂性,我们讨论单个模块而不是单个应用程序要更有意义些。二者在资源使用和财务浪费上的差异是巨大的。在这个追求“降本”的时代为什么人们还要不知变通地默认构建微服务而不是动态的模块化单体架构呢 我们可以从这两大“架构阵营”学到很多东西。诚然微服务为亚马逊创造了奇迹。但公平地说他们的云成本已包含在这个奇迹之中。所以一位的搞微服务教条肯定是有问题的。 另一方面互联网是建立在单体之上的。它们中的大多数都不是模块化的。两者都有普遍适用的技术。因此笔者看来正确的选择是构建一个模块化的单体结构先搭建好合适的身份验证基础设施如果我们想在未来转向微服务我们可以利用这些基础设施来进行解构拆分。 9、后记 在设计应用时我们目前更多是面临“二选一”的架构选择单体和微服务。它们二者通常被视为相反的方法。 在小型系统演进过程中有这样一个不争的事实单体应用程序往往会随着时间的推移而在架构上降级即使在其生命周期开始阶段就定义其为架构。随着时间的推移各种架构的禁止事项会不知不觉地进入项目久而久之系统变得更难改变进化性受到影响。 另一方面微服务提供了更强的分离手段但同时也带来了许多复杂性因为即使对于小型应用程序团队也必须应对分布式系统的挑战。 单体回归也是具体的有条件的回归。我们看到趋势的改变代表着某段时期具体任务或者目标正在变化。出于目标的变化我们对于微服务和单体架构的二选一的选择问题也不能再教条式的看待。 事物往往都在螺旋式的演进对于架构而言亦如是。 最后推荐一款应用开发神器 关于目前低代码在技术领域很活跃 低代码是什么一组数字技术工具平台能基于图形化拖拽、参数化配置等更为高效的方式实现快速构建、数据编排、连接生态、中台服务等。通过少量代码或不用代码实现数字化转型中的场景应用创新。它能缓解甚至解决庞大的市场需求与传统的开发生产力引发的供需关系矛盾问题是数字化转型过程中降本增效趋势下的产物。 这边介绍一款好用的低代码平台——JNPF快速开发平台。近年在市场表现和产品竞争力方面表现较为突出采用的是最新主流前后分离框架SpringBootMybatis-plusAnt-DesignVue3。代码生成器依赖性低灵活的扩展能力可灵活实现二次开发。 以JNPF为代表的企业级低代码平台为了支撑更高技术要求的应用开发从数据库建模、Web API构建到页面设计与传统软件开发几乎没有差异只是通过低代码可视化模式减少了构建“增删改查”功能的重复劳动还没有了解过低代码的伙伴可以尝试了解一下。 应用https://www.jnpfsoft.com/?csdn 有了它开发人员在开发过程中就可以轻松上手充分利用传统开发模式下积累的经验。所以低代码平台对于程序员来说有着很大帮助。
http://www.w-s-a.com/news/889030/

相关文章:

  • 常州西站建设规划室内装修设计学校哪里好
  • 大连网站制作选择ls15227如何编辑网站
  • 网站发稿平台迪士尼网站是谁做的
  • 常州有哪些好的网站建设案例wordpress 360 插件
  • 模板网站有后台么柳城网站建设
  • 地方门户网站制作一级做c爱片的网站
  • 自己上传图片做动漫图网站北京福田汽车
  • 一级a做爰片免费网站录像ps做网站图片水印
  • 网页广告投放成都优化推广公司
  • 网站开发 印花税网页制作站点
  • 创建个人网站有什么好处国外建站系统
  • 桂林学校网站制作2018年网站设计公司
  • 建网站不想用怎样撤销搜狗收录提交入口网址
  • 做简单网站需要学什么软件有哪些南通优普网站建设
  • 网站排版尺寸湖北交投建设集团集团网站
  • 南京网站设计公司有哪些公司看动漫是怎么做视频网站
  • vs做网站怎么做窗体怎么在电脑上自己做网站吗
  • 做网站应该学什么网站编程 外包类型
  • 双鱼儿 网站建设站群系统哪个好用
  • 怎样自己做刷赞网站电商设计需要学什么软件有哪些
  • 关注城市建设网站居众装饰
  • 网站建设的语言优化企业网站
  • 成都旅游网站建设规划女性门户资讯类网站织梦dedecms模板
  • 二手车为什么做网站网站建设合作合同范文
  • 网站建设维护和网页设计做网站都需要服务器吗
  • 成都网站设计报告书系统平台
  • 怎样进行网站推广wordpress微博图床
  • 做一个平台 网站服务器搭建网架公司股价
  • 链家在线网站是哪个公司做的一个虚拟主机做2个网站
  • 网站开发实训报告模板学校网站建设计划