• [技术干货] 【深入浅出,Paas之路】华为云MVP田晓亮:企业向微服务架构转型的几点思考
    IDC的报告曾指出,到2021年,在超过一半的全球2000强企业中,平均1/3的数字化服务交互都将来自API开放生态系统,增长势头远超其自身的API交互能力。开放的API生态系统是企业数字化平台开放重构的关键。据悉,来自 Twitter、Netflix 和 Google 等公司的广受欢迎的公共 API 平均每天调用 10 亿到50亿次,API调用量逐渐成为一个开放平台成功的关键指标,哪些技术可以驱动API快速增长?拥有12年研发经验的田晓亮给出了他的答案。田晓亮现担任华为云微服务领域首席架构师,他也是国内早期服务网格实践者,曾自研服务网格作为云服务提供给客户业务使用。且听他娓娓道企业数字化转型的关键,以及系统性开展微服务化的一些重要举措。微服务为何如此重要?这里引用Smart Bear 2020年的API报告。如上图所示,微服务技术遥遥领先,成为最关键的领域技术,是企业API经济的技术基石。排在第二的DevOps相关技术则是微服务顺利落地的关键要素和前提。而微服务本身是一种架构模式,这也侧面证明了软件架构设计的价值。一款软件大部分的生命周期都处在维护期,不断地接受新需求,不断变化演进以满足需求。软件架构设计的主要目标便是支撑软件系统的全生命周期,设计良好的架构可以让系统便于理解、易于修改、方便维护,并且能轻松部署。软件架构的终极目标就是最大化程序员的生产力,同时最小化系统的总运营成本,微服务架构恰好能完美地达成这个目标。当然,有个题外话,研发人员也不必担心效率提升自己被优化,因为杰文斯悖论在这里也适用:技术进步提高单位人力利用效率,结果是增加而不是减少企业对人力的需求。是什么阻碍了微服务的应用接下来再看报告中另一个部分,是什么阻碍一个组织应用微服务?依次为:欠缺实践经验和技巧(或者我认为是不易雇佣相关人才);现存代码改造难;工作负担太重,没人(新的需求加入管道,它可以增加营收,此时如果老架构不是业务发展的障碍,就被搁置);IT成熟度不足、流程问题、基础设施问题;没预算;还没确定业务方向;缺少团队协作;缺少工具和技术。因为缺乏上述提到的这些东西,向微服务架构模式前进的企业可谓是千疮百孔。作为云服务提供商,或许可以帮助企业解决这些问题。田晓亮讲了一个他亲身经历的故事:我曾经拜访过一家企业,他们打算让业务团队在云上买些虚拟机自己搭建基础平台,被我阻拦了下来。因为当他们的业务增长后,会遇到各种各样的平台问题,但又没有相关的人才储备。当他们用开源的软件部署,遇到的生产问题其实需要开源社区的人来解决。而这个企业并没有清晰划分职责的技术组织。从商业视角出发,非主营核心业务通过外来购买付费服务来完成更为合适。另外他们也许进入了一个**的架构设计误区,在没有确定业务能力的情况下过早的进行了技术选型,而这个工作通常是要延后处理的,平台的维护成本可能会拖垮业务开发团队。通常情况下,大企业一般会使用云厂商提供的计算、存储等资源,也有自建IaaS服务或者两者并用的,然后在laaS层之上构建PaaS服务,为公司内部的业务服务。所以大型企业会清晰地拆分业务团队与基础设施团队,田晓亮本人就曾是基础设施团队的一员。在这种情况下,基础设施团队也是微服务架构模式的忠实用户。也就是说,他们不但要支撑好平台用户的微服务,自己也应用了该模式。基于多年的微服务转型经验,田晓亮提炼了几个可以帮助企业完成微服务数字化转型的关键点。如何系统性的展开微服务化我们可以围绕软件开发的速度,系统的安全和服务质量来构建微服务相关技术底座。再结合业务的实际发展,逐步转型微服务架构,不必在业务发展初期草草决定技术细节。匹配业务所需是否选择微服务架构模式应该从业务实际需求出发,企业先明确定义业务用例和策略,在此基础上进行架构方案的选择。对于一些刚刚起步的公司,单体应用也许就能满足业务需求。一切以快为准,当单体的开发效率比微服务高时,就果断的选择单体。而随着业务的扩大,企业可以通过绞杀者模式将单体应用向微服务架构模式迁移,进行单体应用绞杀的过程也称为应用现代化的过程。据维基百科,绞杀模式的使用场景是从单体应用平滑演进到微服务,将遗留应用程序转换为现代技术和技术栈的过程,也可称之为应用程序现代化。这种模式通常针对1个遗留应用系统,适合前期野蛮成长,业务增速较快的企业。整个改造流程不需要一步到位,一点点补充新的功能进入管道,比如有的功能可以增加营收,此时如果老架构不是企业业务发展的障碍,就可以被搁置并随时重启演进。具体策略有:新功能用新的微服务实现(阻止单体水平扩展和演进)隔离表示层和后端(降解单体)将现有的功能提取到微服务或者独立为微服务(降解单体)华为云CSE,解决分布式系统治理之难从单体成为微服务之后,假如没有成熟的工具配套,一切的成本都是翻倍提升的,这也是为什么说技术没有银弹。运行时的治理就是其中一个难题。华为云CSE的设计意图就是让企业的治理成本和门槛降低,以保障业务稳定健壮的运行,提供高质量API服务。CSE微服务引擎提供了基于业务视角的流量治理功能,使用可视化界面规划流量策略,无需关心微服务系统的复杂性。企业需要的只是定义好流量特征,比如登陆操作每分钟只能允许5次。另外使用Spring Cloud编程的应用可以无缝使用云上的能力,无需额外编码。CSE还提供了RBAC认证鉴权系统,提供基于标签的细粒度资源授权功能,可以规划多个账号,赋予角色和相关权限,保证多个团队协作过程中不会误操作或者访问不该访问的数据。这套认证系**立于华为云的IAM,类似MySQL的账号系统是完全独立的,这样团队之间就可以安全共享一套微服务引擎。微服务编程框架or服务网格,业务为王在进行编程框架和服务网格(Istio)之间的技术决策前,不妨先遵循架构设计阶段一个较好的指导思想——保留可选项,即尽可能推迟技术细节的相关决策。比如先确定业务能力是什么,收集用例,再决定选关系型数据库还是非关系型数据库,亦或是两者皆用。任何一种技术的选择皆如此。如在Spring Cloud这类编程框架和服务网格之间的选型存在疑虑时,就要充分的分析企业的业务是否匹配这些技术的适用场景,是否能支撑商业成果。因为选择什么技术手段支撑,终究要回归到业务本质来。企业要对多种可彼此替代的技术进行详尽的洞察和对比,结合需要支撑的业务场景做详尽的论证来验证最适合的技术到底是什么。下边这张表格列举了微服务开发下这两种技术方案的部分特性对比,它并不代表孰优孰劣,只是告诉企业要选择对应的能力来匹配业务、支撑业务。打个比方,Istio能提供绝对的内部网络通信安全,这是它独有的能力,如果企业的业务需要这样级别的防护,那么选择Istio管理会更加方便,而Istio却有很多不关心的维度,而这些维度正式编程框架提供的能力。管理好API如果API主要给外部系统调用,最好采用顶层设计的策略。不建议把这些对外暴露的API的设计权放到各个团队手中,因为最外层的、系统平台消费者可见的API必须是定义良好,风格一致的API,并且严格控制兼容性,可以使用CloudTest对这些API编写测试用例,并且在每次部署后,都执行一遍测试用例以确保平台的行为始终一致。API是业务的门面,可以采用Spring Cloud Gateway开发框架编写对外呈现的API,框架会自动生成Open API文档并注册到CSE微服务引擎实例中,这样可以重点审视API的定义,及时进行改进,高质量的交付所有的API。从DevOps文化建设入手当企业全面推动DevOps文化,并熟练让交付团队掌握相关工具后,微服务架构思维必然会在组织里萌芽。团队需要代码库,流水线等一系列服务来打造一条高效的生产线,故此DevOps技术因为其重要性排在了关键技术第二位。如果没有DevOps的成熟建设,就不要展开架构微服务化。华为云的DevCloud是集华为研发实践、前沿研发理念、先进研发工具为一体的研发云平台,面向开发者提供研发工具服务,让软件开发简单高效当然,系统性展开微服务化并非只有技术类工作,文化理念、团队合作形式、关键成员不断学习和精进都是微服务化的关键。总结简而言之,微服务架构满足了架构设计模式中的单一职责和共同闭包原则,它是业务和商业发展成规模化后的必经之路。微服务既符合架构设计原则,也能最小化系统运营成本,支撑高效的商业活动,在激烈的竞争中起到了“润滑剂”的作用。所以,你的业务是否已经准备好应用微服务了?
  • [热门活动] 【微服务直播 | 好礼多多】微服务快速开发利器之 Local CSE 活动火热进行中
    Local CSE是华为云微服务提供给广大开发者的本地轻量化微服务引擎,用于本地开发的轻量服务中心、配置中心,并提供简单的界面,开发者可以通过Local CSE零改造快速接入部署微服务,无需付费即可进行微服务开发,是广大开发者的微服务开发利器      如何简单接入Local CSE,零成本学习轻量化微服务引擎?如何多场景巧妙运用Local CSE?看华为云微服务高级工程师为开发者详解 Local CSE的服务注册与配置中心,手把手Local CSE实践教学…2022年开年直播微服务本地轻量化引擎 Local CSE利剑出鞘<直播时间>2月17日  19:00-20:00<直播嘉宾>昱霖 华为云微服务框架高级工程师Echo 华为云微服务产品经理<直播地址>微服务快速开发利器之 Local CSE直播预热活动,多重好礼等你来>>戳我,参与直播预热赢好礼<<好礼一:报名送码豆活动期间,成功报名直播并签到可获得200码豆。(限前500名)好礼二:参与邀请排行榜赢大奖邀请好友报名直播并签到赢荣耀Xsports运动蓝牙耳机/华为智能体脂秤 3 /华为mini蓝牙音箱等好礼注意:①人数相同时,以最先到达的为准;②若排名TOP1未达到最低有效邀请数量,则奖励顺延,例如:张三有效邀请量为799人,排名TOP1,则张三的奖励为华为智能体脂秤 3。邀请好友的具体操作流程如下:步骤一:邀请人成功报名活动后(点击去报名),点击图示中的“分享有礼”按钮 步骤二:通过生成的专属链接/邀请二维码,即可邀请好友报名活动。步骤三:好友报名直播后,点击“进入直播间”,填写签到问卷。有效邀请的定义(邀请的好友):所有被邀请人员需满足以下条件才可算成功邀请,纳入奖励数量:拥有华为云账号;2.回到直播间填写签到问卷。看直播,参与提问互动,奖品抽抽抽!1. 直播提问直播期间在“问答区”向专家提问,专家抽中问题进行答疑,抽中问题即可获得《持续演进的CloudNtive 云原生架构下微服务最佳实践]》书籍1本或华为云定制桌面鼠标垫1个(提问格式:手机号码后四位+问题,例:2333+如何零成本学习轻量化微服务引擎?)2. 直播抽奖直播期间,根据小助手在直播间提示的关键词口令进行抽奖,中奖即可获得《持续演进的CloudNtive 云原生架构下微服务最佳实践]》书籍1本或华为云定制桌面鼠标垫1个 [持续演进的CloudNtive 云原生架构下微服务最佳实践] [华为云定制桌面鼠标垫]更多好礼,更多精彩干货,尽在微服务直播间!2022年2月17日(周四)19:00-20:00我在直播间等你>> 扫码加入直播交流群 <<温馨提示:获奖用户将在2月24日16点前公布至本活动帖,请获奖用户在2022年3月3日15点前联系小助手(微信号:servicestage02)完善邮寄地址,过期未联系者视为自动放弃获奖奖品。活动奖品颜色随机,不接受指定,实物礼品将在活动结束后15个工作日内发货,码豆礼品将在活动结束后5个工作日内发放。本次活动一个实名认证账号只能对应一个获奖人,如同一账号填写多个不同获奖人,不予发放奖励;活动参与需遵守《华为社区常规活动规则》;华为云微服务拥有活动最终解释权。 华为云码豆怎么用?会员中心入口:https://devcloud.huaweicloud.com/bonususer/home码豆奖励活动规则:1)码豆可在码豆会员中心兑换实物礼品;2)码豆奖励将于活动结束后的3个工作日内充值到账,请到会员中心的“查看明细”中查看到账情况;3)码豆只能用于会员中心的礼品兑换,不得转让,具体规则请到会员中心阅读“码豆规则”;4)为保证码豆成功发放,如果修改过账号名还请向工作人员提供修改前后的账号名。
  • [热门活动] 【微服务直播 | 好礼多多】微服务快速开发利器之 Local CSE 活动火热进行中
    Local CSE是华为云微服务提供给广大开发者的本地轻量化微服务引擎,用于本地开发的轻量服务中心、配置中心,并提供简单的界面,开发者可以通过Local CSE零改造快速接入部署微服务,无需付费即可进行微服务开发,是广大开发者的微服务开发利器      如何简单接入Local CSE,零成本学习轻量化微服务引擎?如何多场景巧妙运用Local CSE?看华为云微服务高级工程师为开发者详解 Local CSE的服务注册与配置中心,手把手Local CSE实践教学…2022年开年直播微服务本地轻量化引擎 Local CSE利剑出鞘<直播时间>2月17日  19:00-20:00<直播嘉宾>昱霖 华为云微服务框架高级工程师Echo 华为云微服务产品经理<直播地址>微服务快速开发利器之 Local CSE直播预热活动,多重好礼等你来>>戳我,参与直播预热赢好礼<<好礼一:报名送码豆活动期间,成功报名直播并签到可获得200码豆。(限前500名)好礼二:参与邀请排行榜赢大奖邀请好友报名直播并签到赢荣耀Xsports运动蓝牙耳机/华为智能体脂秤 3 /华为mini蓝牙音箱等好礼注意:①人数相同时,以最先到达的为准;②若排名TOP1未达到最低有效邀请数量,则奖励顺延,例如:张三有效邀请量为799人,排名TOP1,则张三的奖励为华为智能体脂秤 3。邀请好友的具体操作流程如下:步骤一:邀请人成功报名活动后(点击去报名),点击图示中的“分享有礼”按钮 步骤二:通过生成的专属链接/邀请二维码,即可邀请好友报名活动。步骤三:好友报名直播后,点击“进入直播间”,填写签到问卷。有效邀请的定义(邀请的好友):所有被邀请人员需满足以下条件才可算成功邀请,纳入奖励数量:拥有华为云账号;2.回到直播间填写签到问卷。看直播,参与提问互动,奖品抽抽抽!1. 直播提问直播期间在“问答区”向专家提问,专家抽中问题进行答疑,抽中问题即可获得《持续演进的CloudNtive 云原生架构下微服务最佳实践]》书籍1本或华为云定制桌面鼠标垫1个(提问格式:手机号码后四位+问题,例:2333+如何零成本学习轻量化微服务引擎?)2. 直播抽奖直播期间,根据小助手在直播间提示的关键词口令进行抽奖,中奖即可获得《持续演进的CloudNtive 云原生架构下微服务最佳实践]》书籍1本或华为云定制桌面鼠标垫1个 [持续演进的CloudNtive 云原生架构下微服务最佳实践] [华为云定制桌面鼠标垫]更多好礼,更多精彩干货,尽在微服务直播间!2022年2月17日(周四)19:00-20:00我在直播间等你>> 扫码加入直播交流群 <<直播中奖名单公示一、直播预热活动:直播报名签到中奖用户名单如下,奖励已发放到账,请查收核对账号名码豆奖励hid****s200wk5****8200hw7****5200can****n200zhe****u200hw3****9200yiz****l200cai****y200hw4****5200hid****_200kua****y200lon****2200z11****5200hw4****4200hid****7200hw0****7200cao****8200hw1****6200a37****7200xj1****1200cft****7200hw_****1200hen****c200zzz****i200yc-****n200hw7****1200mee****0200fuh****a200nuk****n200hw5****3200qin****6200hw4****1200bru****0200hw1****3200shy****s200温馨提示:获奖用户将在2月24日16点前公布至本活动帖,请获奖用户在2022年3月3日15点前联系小助手(微信号:servicestage02)完善邮寄地址,过期未联系者视为自动放弃获奖奖品。活动奖品颜色随机,不接受指定,实物礼品将在活动结束后15个工作日内发货,码豆礼品将在活动结束后5个工作日内发放。本次活动一个实名认证账号只能对应一个获奖人,如同一账号填写多个不同获奖人,不予发放奖励;活动参与需遵守《华为社区常规活动规则》;华为云微服务拥有活动最终解释权。 华为云码豆怎么用?会员中心入口:https://devcloud.huaweicloud.com/bonususer/home码豆奖励活动规则:1)码豆可在码豆会员中心兑换实物礼品;2)码豆奖励将于活动结束后的3个工作日内充值到账,请到会员中心的“查看明细”中查看到账情况;3)码豆只能用于会员中心的礼品兑换,不得转让,具体规则请到会员中心阅读“码豆规则”;4)为保证码豆成功发放,如果修改过账号名还请向工作人员提供修改前后的账号名。
  • [问题求助] 使用CSE进行微服务调用发送是XMl报文格式,接受方String类型,结果参数莫名多了重复的 &quot;&quot;引号
    急急急,求助!!!!!       java实习生第一次接触Service combService comb,自己在本服务写代码,自测通过。结果到项目测试,其他服务调用出错,比较着急,网上没有解决办法,公司说是:因为发的xml报文 应该是框架 把这个报文转义了,你在这里想办法 把报文转义的去掉 就可以了,直接通过Http调用就不会有这个问题的,主要是用了CSE。1、这是调用过程2:debug发送的string类型的xml报文3.接受方 接受的是String类型的xml报文,就在这产生错误,多了""。4:从这里看,明显接受方的xml报文解析的不正确,多了首尾""。不知道有没有大佬了解这的原因,跪求讲解。
  • [技术干货] POST /v4/default/registry/microservices fail
    [ERROR][org.apache.servicecomb.serviceregistry.client.http.RestUtils] POST /v4/default/registry/microservices fail, endpoint is xxx, message: The timeout period of 30000ms has been exceeded while executing POST /v4/default/registry/microservices for host 部署微应用报这个错,有人知道什么原因不?servicecomb版本是1.3.0的
  • [问题求助] cse使用本地yaml注册,显示契约为空
  • [互动交流] 华为云cse应用实例莫名消失
    各位大佬,华为云(私有云)部署java springcloud微服务,使用CSE专业版。过几天实例就没了,使用的是docker部署的。大家有遇到过吗?<dependency>            <groupId>org.apache.servicecomb</groupId>            <artifactId>service-center-client</artifactId>            <version>2.0.1</version>        </dependency>使用的是这个包开发的,启动方式是附件图片
  • [技术干货] 5分钟搞定Dubbo应用接入华为云微服务引擎CSE
    Dubbo和CSE底层都使用了Spring的依赖注入和bean管理系统,所以使用Dubbo的服务迁移到华为云微服务引擎CSE的工作量较小, 主要改动在依赖和配置方面。本示例的完整代码已放在GitHub上,其中目录dubbo-demo是原始的Dubbo DEMO,目录dubbo-demo-servicecomb是改造后的可直接运行于华为云CSE的DEMO。1、管理依赖:/dubbo-demo/pom.xml在主项目pom里的dependencyManagement中增加如下配置来管理CSE包依赖,子项目就不需要指定CSE版本号。  <dependencyManagement>    <dependencies>      <dependency>        <groupId>com.huawei.paas.cse</groupId>        <artifactId>cse-dependency</artifactId>        <version>2.3.9</version>        <type>pom</type>        <scope>import</scope>      </dependency>    </dependencies>  </dependencyManagement>注意,maven的settings需添加cse的mirror才能正常下载到cse的相关依赖包:    <mirror>      <id>nexus-cse</id>      <mirrorOf>*</mirrorOf>      <name>cse nexus</name>      <url>http://maven.huaweicse.com/nexus/content/groups/public</url>    </mirror>2、服务提供方:dubbo-demo-provider2.1、替换依赖:/dubbo-demo-provider/pom.xml将对Dubbo的依赖替换为对CSE的依赖pom.xmlDubbo        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>dubbo</artifactId>            <version>2.5.7</version>        </dependency>CSE        <dependency>            <groupId>com.huawei.paas.cse</groupId>            <artifactId>cse-solution-service-engine</artifactId>        </dependency>2.2、通过添加标签的方式发布服务接口:DemoServiceImplDubbopublic class DemoServiceImpl implements DemoService {    ......}CSE@RpcSchema(schemaId = "providerSchema")public class DemoServiceImpl implements DemoService {    ......}2.3、修改配置:/dubbo-demo-provider/src/main/resources删除:/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-demo-provider.xml新增:/dubbo-demo-provider/src/main/resources/META-INF/spring/demo.bean.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    xmlns:util="http://www.springframework.org/schema/util" xmlns:cse="http://www.huawei.com/schema/paas/cse/pojo"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="        http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">      <context:component-scan base-package="com.alibaba.dubbo.demo" /></beans>新增:/dubbo-demo-provider/src/main/resources/microservice.yamlAPPLICATION_ID: dubbo_servicecombservice_description:  name: provider  version: 0.0.1cse:  service:    registry:      address: https://cse.cn-north-1.myhuaweicloud.com:443  rest:    address: 0.0.0.0:8082  credentials:    accessKey: 替换为华为云IAM账号AK(如何获取AK/SK)    secretKey: 替换为华为云IAM账号SK    akskCustomCipher: default    project: cn-north-12.4、修改提供方启动入口Dubbopublic class Provider {    public static void main(String[] args) throws Exception {        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});        context.start();        System.in.read(); // 按任意键退出    }}CSEpublic class Provider {    public static void main(String[] args) throws Exception {        Log4jUtils.init();        BeanUtils.init();    }}3、服务消费方:dubbo-demo-consumer3.1、替换依赖:/dubbo-demo-consumer/pom.xml将对Dubbo的依赖替换为对CSE的依赖Dubbo        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>dubbo</artifactId>            <version>2.5.7</version>        </dependency>CSE        <dependency>            <groupId>com.huawei.paas.cse</groupId>            <artifactId>cse-solution-service-engine</artifactId>        </dependency>3.2、修改消费方启动入口Dubbopublic class Consumer {    public static void main(String[] args) {        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});        context.start();        DemoService demoService = (DemoService) context.getBean("demoService");         String hello = demoService.sayHello("world");         System.out.println(hello);     }}CSEimport org.springframework.stereotype.Component;@Componentpublic class Consumer {    @RpcReference(microserviceName="provider", schemaId="providerSchema")    private static DemoService demoService;    public static void main(String[] args) throws Exception {        Log4jUtils.init();        BeanUtils.init();        String hello = demoService.sayHello("world");         System.out.println(hello);     }}3.3、修改配置:/dubbo-demo-comsumer/src/main/resources删除:/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml新增:/dubbo-demo-consumer/src/main/resources/META-INF/spring/demo.bean.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    xmlns:util="http://www.springframework.org/schema/util" xmlns:cse="http://www.huawei.com/schema/paas/cse/pojo"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="        http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">      <context:component-scan base-package="com.alibaba.dubbo.demo" /></beans>新增:/dubbo-demo-consumer/src/main/resources/microservice.yamlAPPLICATION_ID: dubbo_servicecombservice_description:  name: consumer  version: 0.0.1cse:  service:    registry:      address: https://cse.cn-north-1.myhuaweicloud.com:443  rest:    address: 0.0.0.0:8084  credentials:    accessKey: 替换为华为云IAM账号AK(如何获取AK/SK)    secretKey: 替换为华为云IAM账号SK    akskCustomCipher: default    project: cn-north-14、验证:先启动Provider,再启动Consumer4.1、进入华为云微服务引擎CSE控制台:微服务管理>服务治理>dubbo_servicecomb,看到如下服务调用关系:4.2、进入Consumer的输出控制台,能看到输出:Hello world————————————————文章来源: blog.csdn.net,作者:looook原文链接:https://blog.csdn.net/looook/article/details/80312804
  • [技术干货] 微服务拆分的10条规范
    如果你的组织想要采用微服务,那么就需要了解领域驱动设计,事件驱动架构,核心域,子域,有界上下文,反腐层等等,以正确地拆分你的业务逻辑(Business Space)并将其与微服务体系结构(Code Space)映射,这样你就可以获得微服务的好处。我将在本文中对它们进行总结,并为你在组织中拆分微服务时提供一些指导。微服务拆分的10条规范1.使用有界上下文:使用有界上下文,我们分离数据模型,抽象业务中的共性。每个有界上下文都有自己的业务逻辑。在进行微服务拆分之前,首先要做的是缩小产品经理与开发人员之间的距离,产品经理可能不了解技术术语,技术团队可能不了解技术术语在业务方面的重要性。他们就像一个葡萄牙语人士与一位英语人士交谈:没有人理解彼此的信息。因此,为了弥补差距,我们需要采取以下步骤:开发人员与产品经理需要讨论:“业务目标是什么?”。“特定功能中的主要角色是什么?” “他们在定义功能时使用了哪些术语?” 在每个步骤上,都要提出更多问题,直到双方达成一致。每个上下文中每个域名实体名称都要是清晰的。为每种上下文定义一种通用语言,以便业务团队和技术团队在交流时可以使用一种通用语言进行交流。从一个粗粒度的有界上下文开始。2.确定核心域并保持竞争优势:核心域是为你的业务带来收益的领域。对于在线购物而言,购物车模块是核心领域,它为从企业到消费者(B2C)提供了平台。了解你的核心模块,并思考如何改进竞争对手没有的功能。任何自动化或创新都会提高优势并增加你的收入,因此请注意,要在核心领域进行研发和投资,以保持竞争优势。3.对通用域进行成本优化:通用域就是该领域中每个企业所共有的领域,并且不同的第三方厂商已经提供了解决方案。像你的信息通知模块或广告活动模块,建议不要花钱来重新发明轮子,最好以便宜的价格采用第三方解决方案。4.考虑支持领域:核心域需要支持域的帮助来丰富自身功能,甚至在某些情况下,支持域也可以带来收益,并且将来有可能成为核心域。例如,在购物车域中,库存管理是支持领域,但投资研发-识别客户订单最近库存位置的算法,对降低运输成本也很重要。5.引入反腐层:反腐层(Anti-corruption layer,简称 ACL)介于新应用和旧应用之间,用于确保新应用的设计不受老应用的限制。是一种在不同应用间转换的机制。创建一个反腐层,以根据客户端自己的域模型为客户提供功能。该层通过其现有接口与另一个系统进行通信,几乎不需要对其进行任何修改。因此,反腐层隔离不仅是为了保护你的系统免受异常代码的侵害,还在于分离不同的域并确保它们在将来保持分离。反腐层是将一个域映射到另一个域,这样使用第二个域的服务就不必被第一个域的概念“破坏”。实际上,我们经常遇到基于大型机或任何其他语言构建的旧系统,但无法拆分该系统,并且还需要使用旧应用的数据。因此,在旧应用和微服务通信之间创建反腐层是一个好主意。还要考虑通用领域,因为他们是不受开发团队控制的任何外部系统(第三方系统),因此也需要引入一个反腐层,该层将微服务与外部AP隔离开来,充当微服务和第三方之间的翻译者。它还可以帮助你将来采用任何第三方库。6.识别数据通信模式:一旦基于功能拆分了微服务,并且每个核心服务封装了它们自己的数据库,接下来就要考虑不同微服务间是如何通信的?是同步的?还是异步的?例如,对于一些系统,用户可以执行部分功能并创建中间状态,另一个系统对中间状态采取措施并回调或通知用户。7.引入事件驱动架构(EDA):在实际的应用程序中,你的业务案例具有复杂的工作流,并且根据数据的状态在工作流上具有许多分支。如果你考虑通过Rest API公开所有内容,则会看到它创建了一个复杂的通信网络。因此,我们需要一个干净的架构,其中每个微服务都可以独立运行而不会产生耦合,这里事件驱动的架构起着至关重要的作用,每个事件都包裹着状态的变化,并且微服务遵循发布订阅(pub/sub) 模型,因此一个微服务会发布以事件的形式包装的数据,其他微服务会侦听该事件。由于事件是不可变的,因此它也保存实体或聚合器的历史记录。8.使API简洁明了:在微服务中,在发布API时,请确保你的API不发布内部状态。发布API是一种使其他服务可以获取足够的信息以继续其流程的方式,因此要虑封装和网络调用,不应多次返回以获取派生信息。还要考虑事件,应该发布哪些事件以及哪些事件必须保留在内部。也许你可以发布一个粗粒度事件,而不是发布一个个内部的小事件。例如,你有地址更改事件和个人信息更改事件。最好是发布一个名为CustomerUpdateEvent的粗粒度事件,而不是提供两个独立的事件。9.将相关的微服务合并为更大的服务:拆分之后,当需要添加或更新功能时,你会遇到一些微服务总是一起变化的情况。这时候,你应该知道你已经以错误的方式拆分了它。它们一定不能被隔离到一个小型服务中,它们是同一逻辑单元的一部分。因此,将它们合并为一个服务是明智的,将减少不必要的网络通信。10. 引入无缝开发支持工具:微服务不是免费的午餐。如果你采用微服务,那么首先要做好准备,因为微服务是分布式的,因此要投资一些软件工具,以此来扩展弹性和提高可用性,并缩短产品投产时间,帮助尽早发现故障等。因此,请花钱在CI / CD流水线上,采用云基础架构,使用跟踪工具,使用日志聚合器来搜索日志,使用混沌工程测试你的系统,等等。结论拆分微服务时,以上几点是必要的。我将针对每个主题写一篇文章,介绍它们如何在采用微服务体系结构中发挥关键作用。另外,我想听听你在拆分微服务时所面临的挑战。译文链接: https://dzone.com/articles/10-commandments-on-microservice-decomposition转载https://www.kubernetes.org.cn/8994.html
  • [问题求助] 请问python如何注册到cse6.5,sc8.0,主要是如何维持心跳?
    最近想将python微服务与cse微服务进行整合,之所以用python微服务主要是做一些数据治理方面的工作,但从sce官方文档中,只看到微服务的注册,没有看到如何维持心跳。
  • [问题求助] CSE SDK的使用。从2.1.3升级到2.2.2之后,evenloop线程被阻塞了。
     Thread[transport-vert.x-eventloop-thread-2,5,main] has been blocked for 368339 ms, time limit is 2000客户并没有jar的依赖包,排除了edge-core模块导致该问题,麻烦大佬给看下该问题
  • [问题求助] CSE注册失败,新添加controller注册不上,第一次添加的controller可以正常注册访问其他微服务
    [ERROR][MapServiceRegistryClient.java-212][Service Center Task [java.util.concurrent.ThreadPoolExecutor$Worker@553f3655[State = -1, empty queue][85]]][]-register schema cn_dev_default#CDPSolutionService#MICROSERVICE#CDPDatasetService#alliance_cdp_cluster_dev#1.0.0.102/DataflowController fail.com.huawei.nuwa.map.support.servicecomb.client.MapServiceRegistryClientustomStackTrace com.huawei.nuwa.map.api.exception.InvalidParamException: {"code":400,"error":"schemaId is not belong to the service"}    at com.huawei.nuwa.map.client.RestApiClient.translateException(RestApiClient.java:160) ~[nuwa-cloudmap-core-1.0.1.105.jar!/:?]    at com.huawei.nuwa.map.client.RestApiClient.restApi(RestApiClient.java:76) ~[nuwa-cloudmap-core-1.0.1.105.jar!/:?]    at com.huawei.nuwa.map.client.NuwaMapClient.restApi(NuwaMapClient.java:467) ~[nuwa-cloudmap-core-1.0.1.105.jar!/:?]    at com.huawei.nuwa.map.client.NuwaMapClient.registerMicroServiceSchema(NuwaMapClient.java:407) ~[nuwa-cloudmap-core-1.0.1.105.jar!/:?]    at com.huawei.nuwa.map.client.MicroServiceClient.registerMicroServiceSchema(MicroServiceClient.java:133) ~[nuwa-cloudmap-core-1.0.1.105.jar!/:?]    at com.huawei.nuwa.map.support.servicecomb.client.MapServiceRegistryClient.registerSchema(MapServiceRegistryClient.java:208) [nuwa-cloudmap-registry-servicecomb-1.0.1.105.jar!/:?]    at com.huawei.nuwa.map.support.servicecomb.client.DelegatedServiceRegistryClient.registerSchema(DelegatedServiceRegistryClient.java:202) [nuwa-cloudmap-registry-servicecomb-1.0.1.105.jar!/:?]    at org.apache.servicecomb.serviceregistry.task.MicroserviceRegisterTask.registerSingleSchema(MicroserviceRegisterTask.java:368) [service-registry-1.3.2.jar!/:1.3.2]    at org.apache.servicecomb.serviceregistry.task.MicroserviceRegisterTask.registerNewSchema(MicroserviceRegisterTask.java:222) [service-registry-1.3.2.jar!/:1.3.2]    at org.apache.servicecomb.serviceregistry.task.MicroserviceRegisterTask.registerSchema(MicroserviceRegisterTask.java:200) [service-registry-1.3.2.jar!/:1.3.2]    at org.apache.servicecomb.serviceregistry.task.MicroserviceRegisterTask.registerSchemas(MicroserviceRegisterTask.java:170) [service-registry-1.3.2.jar!/:1.3.2]    at org.apache.servicecomb.serviceregistry.task.MicroserviceRegisterTask.doRegister(MicroserviceRegisterTask.java:122) [service-registry-1.3.2.jar!/:1.3.2]    at org.apache.servicecomb.serviceregistry.task.AbstractRegisterTask.doRun(AbstractRegisterTask.java:41) [service-registry-1.3.2.jar!/:1.3.2]    at org.apache.servicecomb.serviceregistry.task.AbstractTask.run(AbstractTask.java:53) [service-registry-1.3.2.jar!/:1.3.2]    at org.apache.servicecomb.serviceregistry.task.CompositeTask.run(CompositeTask.java:35) [service-registry-1.3.2.jar!/:1.3.2]    at org.apache.servicecomb.serviceregistry.task.ServiceCenterTask.run(ServiceCenterTask.java:115) [service-registry-1.3.2.jar!/:1.3.2]    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_191]    at java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:308) [?:1.8.0_191]    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java) [?:1.8.0_191]    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_191]    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:1.8.0_191]    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_191]    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_191]    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_191]    at org.apache.servicecomb.serviceregistry.registry.RemoteServiceRegistry$1.run(RemoteServiceRegistry.java:62) [service-registry-1.3.2.jar!/:1.3.2]Caused by: com.huawei.nuwa.map.http.HttpException: {"code":400,"error":"schemaId is not belong to the service"}    at com.huawei.nuwa.map.http.AsyncHttpClientImpl.restApi(AsyncHttpClientImpl.java:69) ~[nuwa-cloudmap-core-1.0.1.105.jar!/:?]    at com.huawei.nuwa.map.client.RestApiClient.signAndSendRequest(RestApiClient.java:119) ~[nuwa-cloudmap-core-1.0.1.105.jar!/:?]    at com.huawei.nuwa.map.client.RestApiClient.restApi(RestApiClient.java:70) ~[nuwa-cloudmap-core-1.0.1.105.jar!/:?]
  • [问题求助] 华为云CSE注册失败
    错误日志:2021-05-08 17:35:49.527  INFO 99648 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9002 (http) with context path ''2021-05-08 17:35:49.533 ERROR 99648 --- [icloud.registry] c.h.s.d.r.ServiceCombServiceRegistry     : Unexpected exception in register. java.lang.NullPointerException: null    at com.huaweicloud.swagger.ServiceCombDocumentationSwaggerMapper.documentationToSwaggers(ServiceCombDocumentationSwaggerMapper.java:84) ~[spring-cloud-huawei-swagger-1.5.1-Hoxton.jar:1.5.1-Hoxton]    at com.huaweicloud.swagger.ServiceCombSwaggerHandlerImpl.init(ServiceCombSwaggerHandlerImpl.java:75) ~[spring-cloud-huawei-swagger-1.5.1-Hoxton.jar:1.5.1-Hoxton]    at com.huaweicloud.servicecomb.discovery.registry.ServiceCombServiceRegistry.getMicroservice(ServiceCombServiceRegistry.java:133) ~[spring-cloud-huawei-servicecomb-discovery-1.5.1-Hoxton.jar:1.5.1-Hoxton]    at com.huaweicloud.servicecomb.discovery.registry.ServiceCombServiceRegistry.lambda$asyncRegister$1(ServiceCombServiceRegistry.java:97) ~[spring-cloud-huawei-servicecomb-discovery-1.5.1-Hoxton.jar:1.5.1-Hoxton]    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_92]    at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_92]    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[na:1.8.0_92]    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[na:1.8.0_92]    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_92]    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_92]    at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_92]2021-05-08 17:35:49.626  INFO 99648 --- [           main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed2021-05-08 17:35:49.643  INFO 99648 --- [           main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)2021-05-08 17:35:49.667  INFO 99648 --- [           main] s.d.s.w.s.ApiListingReferenceScanner     : Scanning for api listing references2021-05-08 17:35:49.816  INFO 99648 --- [           main] c.y.j.t.m.c.consumer.CseServiceConsumer  : Started CseServiceConsumer in 3.906 seconds (JVM running for 4.413)使用版本  <spring-cloud-huawei.version>1.5.1-Hoxton</spring-cloud-huawei.version><dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>com.huaweicloud</groupId>            <artifactId>spring-cloud-starter-huawei-service-engine</artifactId>            <version>${spring-cloud-huawei.version}</version>        </dependency>求助电话 18511898726
  • cse:request:timeout 不生效
    cse:  request:    timeout :120000不生效,还是会报io.vertx.core.http.impl.HttpClientRequestBase$1: The timeout period of 30000ms has been exceeded while executing POST /xx/xxxx不知道是哪里没有设置 这个默认30000ms
  • [问题求助] cse集成springboot web后开启TLS通信不生效
    cse集成springboot web功能,rest.address端口号和server.port保持一致。配置TLS通信,rest.address改成0.0.0.0:8080?sslEnabled=true。这时候打开页面,不管是访问静态资源还是访问后台接口还是走的http才能请求通过,而不是通过https,有没有大神指导下是什么原因
总条数:274 到第
上滑加载中