微服务穷途末路?新招式能否开启“黄金演进期”?云原生容器化应用程序分布式数据库

那么,微服务到底有没有什么问题?ServiceWeaver是否能够成为微服务架构的“新解”呢?在年终盘点之际,InfoQ采访了字节跳动服务框架团队架构师、CloudWeGo开源负责人罗广明,探讨了微服务发展十几年来的进展和关键技术演变。

InfoQ:微服务架构今年已经满十岁了,您是否能总结下它的演进关键阶段?目前分布式架构还面临的最大挑战是什么?

罗广明:微服务架构在过去十年中经历了几个关键阶段的演进:

微服务架构的一些挑战包括

解决这些挑战需要不断演进的工具、最佳实践的制定以及组织文化上的变革,以确保微服务架构能够持续发展、能在复杂的环境中稳定运行以及获得真实的收益。

InfoQ:这一年架构领域有哪些关键框架/组件有关键更新或演进?

罗广明:架构领域一直在不断演进和更新,在2023年,一些关键框架和组件经历了重要的更新或者取得了进展:

InfoQ:微服务、单体、模块:有人认为决过度复杂性和缺乏可维护性的方法是“模块化”,您同意这个观点吗,为什么?

罗广明:“模块化”确实是解决复杂性和可维护性问题的一种重要方法,但并不是唯一的方法。微服务架构、单体应用和模块化都可以在一定程度上解决复杂性和可维护性问题,但它们有不同的特点和适用场景。

模块化指的是将一个系统或应用拆分成独立的功能模块,每个模块都有明确定义的职责和界限。模块化可以促进代码重用,减少重复编写相似功能的代码;模块化降低了系统的耦合度,使得单个模块的修改和维护更加简单和安全。但是,如果模块之间的交互设计不合理,或者模块划分不够清晰,仍然可能导致系统的复杂性和维护困难。模块化架构在服务弹性和可靠性仍存在挑战。

微服务架构和单体应用则是针对不同需求和场景的解决方案。微服务架构通过将应用拆分成小的、自治的服务来解决单体应用的复杂性和可维护性问题。而单体应用虽然有着较高的集中性和一体性,但在一些规模较小或者业务简单的情况下,也能够提供良好的开发和维护体验。

在解决复杂性和可维护性的问题时,并非只有一种方法是完全正确的。模块化是一个重要的思维模式和架构方法之一,但结合实际需求和场景,可能需要综合考虑模块化、微服务架构、单体应用等不同的解决方案。

在大型企业中,采用微服务架构后,随着业务的快速增长,出现微服务过微或者过度复杂似乎是一件不可避免的事情。这个时候,企业需要一套成熟的微服务架构复杂度治理体系,用来管控增量服务和治理存量服务。字节跳动于2023年正式启动微服务架构复杂度治理,大致分为服务数治理、依赖治理和领域治理,循序渐进,依次治理,逐步深入。以服务治理为例,既包括对功能废弃服务、过微服务、长尾服务、定位重复服务等存量服务的下线治理,也包含合理的增量管控策略。而链路治理和领域治理则是围绕优化架构反模式和面向领域的微服务架构治理展开。

InfoQ:今年一个比较大的事件是Google发布了ServiceWeaver,允许用户“将应用程序编写为模块化整体,并将其部署为一组微服务”,这种方法有可能代表未来的一种相对主流解决方案吗?

罗广明:ServiceWeaver提供了一个灵活的框架,能够在本地简化开发,并将模块化单体应用转变为分布式微服务架构,在部署时允许自由配置组件的分布式部署方式,从而应对应用演进过程中的不确定性,并轻松适应组件间交互模式的变化。

可以看到,ServiceWeaver提供了一种全新的开发与部署解决方案,其最大的特点就是提供了一种灵活性和可配置性,对于业务的演进非常友好,可以灵活调整部署模式,来实现成本优化和价值最大化。

与ServiceWeaver架构模式相对应的,字节跳动正在内部大规模落地合并部署与合并编译,这是给已经大规模落地微服务架构的业务提供一种降本增效的手段。合并部署方案主要思路是结合容器亲和性调度、流量调度计算、更高效的本地通信,让原本需要跨机的网络通信变成同机进程间调用,既能与现有体系融合又能减少微服务链路带来的性能损耗。

合并编译则是一套全新的微服务编排思路,还是基于微服务的模式开发,在编译/发布期像内联函数一样内联微服务,以实现微服务成本优化。既可以拥有单体的性能,又拥有微服务的研发效率。其核心目标是将微服务进程间通信开销变成进程内方法调用,避免网络传输和序列化成本,也无需微服务治理逻辑以及其带来的一切成本开销。

InfoQ:云原生可移植性设计比如Dapr等框架是否有得到广泛采用?为什么?

与服务网格相比,Dapr架构更加复杂,Dapr的工作模式是能力抽象,需要业务应用程序遵从标准API进行请求开发与改造。服务网格主要设计目标是低侵入,采用原协议转发的方式可以尽可能的降低对应用的侵入。Dapr的主要设计目标是可移植性,即在跨云跨平台的前提下实现无厂商绑定,采用的方式是在将分布式能力抽象为标准API,并在各种开源项目和云平台上提供这套标准API的不同实现,从而达到在不同平台上运行的目标。因此Dapr的代价是需要应用进行适配和改造,侵入性比较大。因此Dapr更适合新应用开发(GreenField),对于现有的老应用(BrownField)则需要付出较高的改造代价。这也是Dapr当前并未获得广泛采用的主要原因。

InfoQ:微服务兴起后,架构领域有了一个变革:架构更多的是做出设计决策,而不是使用UML或架构描述语言绘制方框和线条。最近这十年,您观察到架构设计文化还发生了哪些变化?有哪些在消亡,有哪些得到演化?软件架构师的技能要求主要有哪些改变?

罗广明:根据本人经验和观察,近年来,软件架构设计文化经历了一些显著的变化:

技能要求的转变主要包括,需要深入了解云原生编排、容器化、服务网格、微服务框架、CICD、可观测等诸多技术,以便为应用程序选择最佳的部署和运行环境、提供安全能力和微服务治理能力、保障系统的稳定性和可靠性。

InfoQ:您认为人工智能会对软件架构以及架构设计的哪些方面造成影响?

罗广明:2023年,人工智能(AI)展现了前所未有的智慧和发展,尤其是在基础大模型领域,给很多人带来了很多机遇和挑战。与此同时,AI原生应用的发展尚处于早期,AI对于软件架构与设计的影响尚没有在大规模生产环境下得以体现和验证,但是不可否认的是,AI必然可以带来多维度的变化。比如,AI可以帮助提高决策效率、优化设计、增强系统的自适应性和安全性,以及更好地应对系统的演化和变化。然而,AI技术在这方面的应用也需要考虑隐私、安全以及技术成熟度等方面的问题。

InfoQ:您能展望下架构未来3-5年的发展吗?

罗广明:这个问题太庞大了,可以简单预料一下几点:

持续的云原生和微服务发展:云原生和微服务架构会继续发展并成为主流,更多企业将采用这些架构以获得更好的弹性、扩展性和敏捷性。尤其是传统行业,其云原生架构采纳和转型还处于非常早期,需要诸多微服务基础设施和通用能力来简化云原生改造成本。

AI在架构中的应用增加:AI技术将更广泛地用于架构设计中,包括AI辅助设计、决策支持与建议、智能监控、性能优化等方面,提高架构设计和系统优化的智能化水平。

低代码/无代码平台的普及:随着AI能力的支持与落地,低代码/无代码平台将得到更广泛的应用,使得开发人员能够更快速地开发、构建和部署应用,对架构设计也会带来一定的影响。

在2023年结束之际,InfoQ编辑部重磅推出“年度技术盘点与展望”专题,聚焦AIGC引发的变革,与50多位头部专家深度对话,希望能为你揭示架构、前端、运维、大数据、云计算、编程语言、数据库等领域的核心变化和演进逻辑,明晰金融、汽车、制造、零售等行业的数字化、大模型应用思路和路径。

THE END
1.离线任务已支持复用任务参数ModelWhale版本更新如果你的数据处理、模型训练需要持续运行较长时间,可以使用 ModelWhale「离线任务」进行代码的云端托管运行。 (1)新增复用任务参数 创建任务时,你可以复用某个离线任务的参数配置,快捷创建任务。 (2)新增“每分钟”定时任务 用户可以通过左侧面板配置定时任务规则,配置后可在右侧预览执行序列。 https://blog.51cto.com/u_16154940/12790673
2.LDD在线版重塑数字时代的用户体验体验升级之旅摘要:LDD在线版致力于重塑数字时代的用户体验,通过优化界面设计、提升功能实用性和增强用户体验等方面,为用户提供更加便捷、高效、智能的数字化服务。该版本注重用户体验的个性化需求,提供更加丰富的功能和更加流畅的操作体验,以满足用户在数字时代的需求和期望。 https://www.hnjwwzy.cn/post/539.html
3.用户在线与离线宁默然用户在线与离线 思路: 记录用户每个操作的时间,定时更新数据库中用户最后操作时间 设定默认时间用户无操作为离线, 获取用户最后操作时间并加上默认时间值, 与当前时间进行对比, 大于则在线,小于则离线。https://www.cnblogs.com/ningmo/p/5922060.html
4.用户在线离线忙碌功能设计与实现用户是否在线设计需要在系统中展现,系统中用户的状态。展示用户是否在线、忙碌或者离线。 做法: 使用webSocket 建立链接,通过实时推送用户信息,达到用户状态的更新。 当用户登录时自动设置用户状态为上线,并推送用户信息到 前端。 当用户离线时自动设置用户状态为离线状态,并推送给前端。 https://blog.csdn.net/u012373815/article/details/77148902
5.设备接入IoTDA物联网平台如何切换设备的在线/离线状态?NB-IoT设备上报数据后为状态为在线,距离上次上报数据25小时内未上报数据,会刷新状态为异常。超过49小时未上报数据,平台会将设备置为“离线”状态。 MQTT设备连接到平台后状态为在线,断开连接后平台1分钟内会自动刷新状态为离线。如果手动点击状态刷新按钮,则可实时刷新为离线状态。https://ecloud.10086.cn/op-help-center/doc/article/43631
6.基于客户和用户需求的B端产品系统设计基于以上测试结论,最终采用了8倍压缩的在线方案,同时为用户提供了通过有线传输的方式同步音频(硬件自带连接线,但是需要额外采购otg转接头),有线传输的同步时间非常快,1小时音频基本几秒就可以完成同步。 (2)离线录音→在线+离线 在试点(poc)项目应用了一段时间后发现,离线方案最大的问题还是同步过程过于缓慢,使用otghttps://maimai.cn/article/detail?fid=1645337772&efid=bOdzRtXutjpD4KzP6xbhog
7.环球网校在线网络课程辅导服务条款备注:如有辅导课程学习期限与上述期限不同,最终应当以环球网校在线(www.hqwx.com)对应的课程频道辅导方案介绍为准。 9、“环球网校在线”离线课件使用规定: (1)一个注册用户最多可以在三台终端上注册环球网校在线离线课件播放器。同一台电脑如果硬件没有变化不限制注册次数 https://www.hqwx.com/help/article.htm
8.电力用户状态检修在线监测离线检测仪器仪表河北华电聚能电力河北华电聚能电力技术有限公司专注于电力用户状态检修及在线监测、离线检测仪器仪表等产品的自主研发和生产制造,并提供系统解决方案的制造商,公司是新兴的电力电子企业、科技型中小企业,集工程施工、产品研发、技术服务于一体的综合型企业。http://hbhdjn.com/
9.神策智能推荐玩法嘲化解读和评估体系人工评估比较好理解,比如我们认为一个用户很喜欢动画片,于是进行一些推荐,我们可以直接去观察所推荐的内容中用户播放动画片的比例是否比较大;同时AUC、DCG也是常用的模型离线评价指标,但是这些数据指标可能会存在比较大的偏差,所以一般不会拿此指标来直接评估效果,而只是把它作为参照指标。 https://news.zol.com.cn/768/7683765.html
10.用户指南数据中心收到数据申请后会根据数据的需求情况及时与用户联系,明确用户的需要。 3、签署共享使用责任书 数据中心与数据申请者确认数据需求后,数据申请者需签署数据共享使用责任书。 4、数据提供及反馈 数据中心根据数据申请表中的内容对用户申请的数据进行授权和数据加工处理,从在线下载和离线拷贝、邮寄的方式提供给用https://www.phsciencedata.cn/Share/jsp/PublishManager/userGuide.jsp
11.UM20200609SIA3000(COD)化学需氧量在线分析仪用户手册(COD)化学需氧量在线分析仪 用户手册 目录 6 在线监测 31 6.1 量程配置 31 6.2 监测模式 33 6.3 在线离线切换 35 6.4 断电重启的处置 35 6.5 水样适用性 35 7 维护操作 37 7.1 仪表急停 37 7.2 仪表复位 37 7.3 设备监控 38 7.4 信号调整 38 7.5 试剂维护 39 7.6 清洗维护 40 7.7 手动操作 41 7.8https://m.book118.com/html/2022/1026/5142301030010011.shtm
12.php怎么判断app用户是否在线?Worktile社区if(time() – $last_activity < $inactive_time){ echo '用户在线';} else { echo '用户离线';}```3. 使用心跳机制:在app端与服务器建立长连接,定时发送心跳包来维持连接。服务器接收到心跳包后,更新用户最后活动时间,通过判断最后活动时间来确定用户是否在线。以上是几种常见的判断app用户是否在线的方法,https://worktile.com/kb/ask/175086.html
13.闪电立方数据传输服务数据在线离线迁移存储闪电立方(Datatransport)能够为用户提供安全、高效、便捷的数据传输服务。支持将对象存储、文件存储从不同设备、不同云服务商迁移和同步到阿里云。它提供在线迁移和离线迁移(闪电立方)两种迁移方式,致力于解决大规模数据传输效率、安全问题等难题。 租用闪电立方管理控制台 https://www.aliyun.com/product/mgw
14.首次用于大规模在线系统AI&大模型ChanghuaPei数据我们发布了一个在本文中使用的大规模数据集(电子商务重排序数据集)。这个数据集是从一个真实的电子商务推荐系统中构建的。数据集中的记录包含一个推荐列表,记录用户-点击标签和特征以便进行排名使用。 评估我们进行了离线和在线实验,结果表明我们的方法明显优于最先进的方法。在线 A/B 测试表明,我们的方法实现了https://www.infoq.cn/article/a1tj74y7V2EKFikKYcwv/
15.AHK实现文字识别(OCR)——离线与在线4种方法总结。–AutoAHK2. Vis2(离线)。 使用iseahound的库Vis2(原理是谷歌的开源项目 tesseract )。 优点是可以离线识别,英文识别效果还凑合。缺点是中文效果不咋滴。 完整打包一键运行版在文末下载。 简单示例如下。 #include <Vis2> ; Equivalent to #include .libVis2.ahk https://www.autoahk.com/archives/35526
16.日语语音识别在线翻译日语在线翻译发音?六、日语人名在线翻译器? 在日语中,假名る可写作好几个汉字,作为名字的话,本人觉得大概可以用流,留,瑠;假名な的话,那,奈,南,纳,名,菜都可以用,就看怎么组合了。 七、语音识别和图像识别的区别? 图像识别,是指利用 计算机 对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。结合用户使用场https://tool.a5.cn/article/show/74501.html
17.redis通过位图法记录在线用户的状态详解Redis这几天在工作中,遇到一个case,就是需要自己实现一个IM在线用户状态的记录,当时查了很多中实现方式,今天来分享一下 主要思想 构造一个位图,里面存的是二进制数据,如:1 0 1 0 1 0 1,通过修改userId对应位置上的0和1来修改用户在线状态,由于默认值为0,所以1代表用户处于在线状态,0代表用户处于离线状态,如图:https://www.jb51.net/article/150185.htm
18.用户报告模板根据微参与的调查数据,在XX年5月,65.5%的用户选择在线预订机票,而只有34.5%的用户离线预订机票。其中,网上预约方式,通过电脑的用户占30.6%,手机占28.2%,平板电脑占6.7%;线下订票方式中,去销售点买票的用户数量最多,其次是直接去机场买票的,只有8.9%通过电话订票。机票高度标准化,互联网普及率超过60%,移动终端比例https://www.unjs.com/fanwenku/470358.html
19.里客云微信活码管理系统源码V6.0.2开源版4、可开启防止重复进群,有效防止资源重复的问题4、显示子码距离上一次更新过去多少时间 创建客服活码v6.0.2新特性:1、支持设置阈值,达到阈值自动切换下一个客服2、支持设置随机,随机展示客服二维码3、用户账号被封、或者到期,用户所创建的客服活码均失效4、新增在线提醒,提醒客户你目前是在线还是离线https://weibo.com/ttarticle/p/show?id=2309404714052487349262