• [技术干货] 微服务拆分的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
  • [问题求助] roma API 公网无法访问
    用postman 无法访问romaAPI 接口。roma 中 api 接口测试可以访问
  • [问题求助] ABC中同步ROMA api数据失败
    The user Hi-zq2021 can't access app Hi-zq2021__ysh_test01
  • 【API Explorer体验送码豆活动】 完成在线调试,就可得码豆!
     冲
  • 什么是RESTful API?
    什么是RESTful API?
  • 如何理解API,API 是如何工作的
    如何理解API,API 是如何工作的
  • 利用java+API开发云存储
        首先搭建idea中所需要的maven环境    查看maven环境是否搭建成功    写测试代码(openstack4Test和jcloudTest),测试是否可以和虚拟机连接成功    运行openstack4测试方法是否成功    运行jcloud测试方法测试是否连接成功    连接虚拟机成功后先写一个index页面作为登录页面    编辑配置文件application.yml文件    首先搭建idea中所需要的maven环境    查看maven环境是否搭建成功    写测试代码(openstack4Test和jcloudTest),测试是否可以和虚拟机连接成功    运行openstack4测试方法是否成功    运行jcloud测试方法测试是否连接成功    连接虚拟机成功后先写一个index页面作为登录页面    编辑配置文件application.yml文件    首先搭建idea中所需要的maven环境    查看maven环境是否搭建成功    写测试代码(openstack4Test和jcloudTest),测试是否可以和虚拟机连接成功    运行openstack4测试方法是否成功    运行jcloud测试方法测试是否连接成功    连接虚拟机成功后先写一个index页面作为登录页面    编辑配置文件application.yml文件    首先搭建idea中所需要的maven环境    查看maven环境是否搭建成功    写测试代码(openstack4Test和jcloudTest),测试是否可以和虚拟机连接成功    运行openstack4测试方法是否成功    运行jcloud测试方法测试是否连接成功    连接虚拟机成功后先写一个index页面作为登录页面    编辑配置文件application.yml文件    创建一个controller包,在controller包里创建一个类,让这个类首先实现到login页面的跳转    测试是否可以跳转到登录页面    在类里实现login连接到远程虚拟机上,同时在po包里创建实体类。代码功能在截图里进行介绍。
  • java云接口_华为云JavaAPI调用数据设备接口(虚拟设备)
    注意:重置密钥时,除了密钥与id改变,其余都不变API接口Demo:https://support.huaweicloud.com/devg-IoT/iot_02_3002.html参考网址:https://huaweicloud.blog.csdn.net/article/details/103934131
  • API
    API概述撮合引擎    成交价        提交订单的优先级:挂单价格 > 挂单时间        订单撮合时,以maker按挂单价,而非taker吃单价格成交    订单生命周期        未成交        已成交        部分成交        已撤销        撤单中    币币交易限价规则        FOK现价规则:如果下单成交深度对应的价格与同方向盘口价的偏差超过30%,则订单立即被全数撤销。    合约交易限价规则费用    交易费用:maker-taker收费规则,maker挂单成交手续费低于taker吃单;阶梯费用;市商计划返还Maker手续费。    充/提币费用服务器    在香港请求    介绍        REST API提供账户管理、行情查询、交易功能。        REST API终端URL https://www.okex.com/        提供了WebSocket流,订阅WebSocket可以获取行情数据的推送        所有请求基于Https协议,请求头信息中contentType需要统一设置为:’application/json’    错误        通过HTTP 4xx或者状态码进行返回,返回内容还将包含错误原因、参数信息。        HTTP库应配置为非2xx请求提供消息主体400    Bad Request — Invalid request fotmat401    Unauthorized — Invalid API Key403    Forbidden — You do not have access to the requested resource404    Not Found500    Intermal Server Error — We had a problem with our server    成功        HTTP状态码200表示成功响应,并可能包含内容分页标准规范    时间戳    数字    ID接口类型    公共接口:获取配置信息和行情数据,无需认证    私有接口:订单管理和账户管理,需要API Key验证访问限制    当访问超过频率限制时,将返回429状态:请求太频繁    REST API:如果传入有效的API key 用user id限速;如果没有则拿公网IP限速。限速规则:各个接口上有单独的说明,如果没有一般接口限速为 6次/秒。    WebSocket将每个命令类型限制为每秒50条命令。验证    生成API Key:API Key、Secret、Passphrase    发起请求    签名    时间戳        OK-ACCESS-TIMESTAMP请求头必须是UTC时区Unix时间戳的十进制秒数格式或ISO8601标准的时间格式。        精确到毫秒        时间戳和服务器时间相差30秒以上的请求将被系统视为过期并拒绝    获取服务器时间        获取API服务器的时间。此接口为公共接口,不需要身份验证        HTTP请求GET /api/general/v3/time        返回参数isoISO8601标准的时间格式;epochUTC时区Unix时间戳的十进制秒数格式。
  • 免费api访问网址(不需要注册)
    API(应用程序编程接口)API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问原码,或理解内部工作机制的细节。免费api访问网址(不需要注册)教书先生稳定、快速、免费的 API 接口服务https://api.oioweb.cn/
  • API
    API的概念定义API(Application Programming Interface)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。也可以理解为是两个应用程序之间通信的机制,或者使用一组规则和协议的组件或计算机硬件。目的提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源代码,或理解内部工作机制的细节。使用API被编写并使用在以下几个地方:    基于web的应用程序    电脑操作系统    数据库系统    计算机硬件    软件库
  • API说明
    API(Application Program Interface应用程序的调用接口 )    API就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。 
  • 如何理解API,API 是如何工作的
    wiki 百科镇楼…[APIs are] a set of subroutine definitions, protocols, and tools for building application software. In general terms, it’s a set of clearly defined methods of communication between various software components.翻译:API 是用于构建应用程序软件的一组子程序定义,协议和工具。一般来说,这是一套明确定义的各种软件组件之间的通信方法。(回来再看(。・∀・)ノ)。本篇文章中,我会用浅显的比喻来解释API,接口(interface),协议(protocol)这些基本概念。enjoy it ! 假设你有一个银行 你有一个仓库来存钱,一个记账本来记各种业务。一个简单的管理银行的方法是直接将权限给所有人,让客户自己动手完成各种业务。这种模式下,一个客户想要存钱的话,他需要:拿着钱去银行打开仓库把钱放进去把这笔业务写到记帐本上离开银行显然这存在着问题:想开开仓库门需要废很大力气,并不是所有的人都能打开,还有些人不识字不会记账。在这个模式下,我们假定所有人都是诚实的,显然这并不成立。(说不定哪一个人存了100块钱记账的时候写了10000块)。这时你遇到麻烦了。雇一个柜员要是我们雇一个体格棒,办事还麻利的人来处理开仓库,记账的问题呢?小娜登场了。现在模式为:建一个柜台将仓库和记账本和顾客分开,这样顾客就不需要再去管仓库和记账本了。想存钱的话直接找小娜就行。这种模式下,要是有人想存钱,他们必须:拿钱去银行告诉小娜我是 MMM 我想要存¥¥¥。小娜打开仓库把钱放进去小娜把业务(transaction )记录好告诉你业务办好了顾客离开银行现在不会发生打不开仓库门或者是记错账的情况了,你觉得很满意。到此我们引出今天的主角API( Application Programming Interface),它能够帮你实现轻松的和其他软件组件(如服务器,操作系统等)的交互。在上面举的例子中,我们雇一个收纳员帮顾客解决了开仓门,放钱,记账这一系列繁琐的过程。这大大节省了顾客的时间,同时提高了银行的效率。同理,如果我们将操作的具体实施步骤抽象化,这将会大大降低开发人员的负担(去记忆所有的步骤花费的力气),从而大大提高了效率。另外的好处是,只要他们遵循了同一个协议,组件可以交换或者是改变。银行不需要知道时哪一个顾客或者说顾客是怎么进来的,顾客也不需要知道银行拿自己的钱去做什么了。只要负责的柜员在这里并做好工作,整个流程将会继续工作。API 应用范围很广:从操作系统中简单的 fork() 到我们接触的百度地图API,和风天气API,又或者是邢远分享的段子,这些 API 都大大简化了程序员的工作。银行里有什么你可能已经注意到了银行分成了两个区域:顾客在前台排好队来办理业务,后台完成各种对钱的操作。在中间层,前台和后台发生了交互, 双方都不能越界 ,交互只能发生在中间的区域。在 API 术语里面,我们管中间的这块区域叫做接口 Interface ;在这里各个部分发生交互。在我们的银行中,前台和后台都同意并且规定使用 Interface 来交换信息。现在,我们假定 Bob 想要取钱。他到了柜台找到了小娜,小娜知道该怎样去取钱,她取好了之后告诉了 Bob。Bob 这时候又问:“你知道今天的股票行情吗”小娜:????WTF ?在这个例子里面,小娜知道怎样取钱和存钱 , 但是她不知道如何去给Bob查查今天的股票行情是怎样的。这个例子引出了另一个概念 协议(Protocol)。在 API 术语中,协议 是规定了各部分之间如何进行交流的一系列规则的集合。各部分之间想要完成交互必须理解并且遵守同一个协议。同时,我们注意到了交换时用的是中文。如果Bob 对小娜说「我想撳五百蚊出嚟呀唔該」,小娜不懂广东话,所以没法理解Bob说的是什么,这又引出了另一个概念 格式(Format)在程序员的世界里,通用的格式包含 XML 和 JSON。最后,让我们假设银行想要扩展业务到股市,这时候就需要一位特殊的接待员来处理与股票相关的业务了,这时,小冰就登场啦。在 API 术语里面, API 端点 通常是指在同一个接口中提供特定功能子集的服务提供者。在这种情况下,小冰和小娜都是端点。(小冰和小娜是同一个柜台不同功能的提供者)不同的端点可以有不同的协议和不同的格式。总结起来:接口是不同组件进行交互的地方。协议是一系列规定了他们之间怎样进行交互的规则。格式定义了他们通过什么进行交流(JSON或者是XML),端点可以在同一个接口里面提供不同的功能。柜员还能干什么?到现在我们把 API 的基础知识过了一遍,接下来我们再来谈一谈 API 的其他特征。w(゚Д゚)w现在又有客户来取钱了,他想要取¥10000。首先,我们可以指示小娜在操作前先去确认一下 Bob 是否真的有这么多钱。(API 能确认所有的操作都是合法的。)小娜查到 Bob 账户里只有一百块了,告诉 Bob 余额不足。(在发生错误的时候 API 会根据错误报告机制发出指示,减轻开发人员的负担。)Bob 认为肯定是哪里出错了,他要求银行给他列一张表,给出他所拥有的每个账户上的余额。结果显示一共有 200 个账户。把他们一下子全给列出来不太实际,所以小娜每次给 Bob 看十个账户,看完了之后再来十个。(这叫做分页(pagination),可以节省带宽和服务器资源,因为你不需要一次获取数据集中的所有内容。)如果 Bob 只想要知道他某一个账户中的余额的话,他可以要求小娜只给她看那个的(这称为过滤(filtering),它还有助于节省带宽和资源,并且更易于导航。)在检查完所有账户之后,鲍勃现在知道他的帐户中确实没有10000美元。他知道爱丽丝购买股票并获得了大量资金,于是伪装成爱丽丝并重新进入银行。他告诉莎莉:“我是爱丽丝,我想从我的账户中提取10000美元。” 小娜识破了他的骗局。(API中内置授权和访问控制,以确保只有授权人员才能访问特定数据。)最后,在试图从银行拿到10000美元失败后,他想报复小娜,他进入银行并多次从账户中提取0.01美元。 (我们可以实施速率限制来控制服务器资源的使用,以确保用户不会滥用服务。)API 通常都会被设计具有这些功能,它可以充当防火墙,在保护您的资源免受滥用的同时允许合法请求通过。
  • [技术干货] HCS裸金属日志查看和常用命令
    注意区分裸金属实例(instance)和裸金属节点(node)的区别。1、裸金属节点相关的操作,主要看ironic日志。包括扩容、格式化、维护模式等1)ironic日志主要为ironic-conductor日志,裸机节点的相关操作都可以先看ironic-conductor日志。ironic-conductor组件主主部署在3个控制节点上,日志可能在任意一个,所以需要依次查看,根据node_id或操作时间关键信息查询。执行命令:cps template-instance-list --service ironic ironic-conductor日志路径:/var/log/fusionsphere/component/ironic-conductor/2)ironic服务还有ironic-api(主主)、ironic-provision(主备)、ironic-console-proxy(主备)、ironic-haproxy(主备)组件,日志查看方法同ironic-conductor,注意主备部署的组件需要查看active节点的日志。日志路径:/var/log/fusionsphere/component/{$componet_name} ,替换路径中的组件名称即可。2.  裸金属实例相关的操作,主要看nova-compute-ironic日志。包括实例下发、挂卸卷、挂卸网卡等nova-compute-ironic组件主备部署在两个控制节点上。多az场景,组件名称可能是nova-compute-ironic00x1)获取裸金属实例对应的nova-compute-ironic组件,执行:nova aggregate-list |grep {az_id}   获取裸金属az对应主机组idnova aggregate-details {aggregate_id}   Hosts中,baremetal-ironic00x就对应nova-compute-ironic00x如下图:bms.x86对应nova-compute-ironic;bms.arm对应nova-compute-ironic0012)查看nova-compute-ironic日志,此处以nova-compute-ironic001举例,实际查看日志是要替换成裸金属实例对应的nova-compute-ironic组件名称。cps template-instance-list --service ironic nova-compute-ironic001登录到active组件所在的节点,查看nova-compute-ironic001日志日志路径:/var/log/fusionsphere/component/nova-compute-ironic00x3)vim nova-compute-ironic001_error.log 打开error日志,Shift+G快捷键直接到文件结尾,查看错误信息。3.  minios的ironic-python-agent(ipa)日志裸机需要pxe的操作(扩容、格式化、实例下发),如果pxe成功进入了minios,但是对应操作失败了,首先查看ironic-conductor日志,当ironic-conductor的日志无法定位时,需要查看ipa日志。ipa日志在远端裸金属服务器上,且minios是内存OS,需要通过服务器的串口重定向功能,实时打印日志进行保存收集。1)控制节点执行:ipmitool -I lanplus -H  {bmc_ip} -U {bmc_username} -P {bmc_passwd} sol activate  替换bmc_ip、bmc_username、bmc_passwd为对应裸机节点的bmc信息。2)通过远程登录工具记录日志,以Xshell为例,打开Xshell的日志记录功能,如下图。3)触发对应的操作,裸金属上电后,开机自检、pxe过程、minios启动、ipa运行等日志都会回显到命令结果里,Xshell也会记录。日志收集完后,Xshell停止日志记录,保存到本地文本文件查看。4、BMS的组合api日志1) 获取组合api节点IP登陆控制节点,导入环境变量后执行:nova list |grep CPT-SRV如下图,最后一列中的IP即为两个组合api节点的IP2) 登录apicom两个节点根据job id 或者虚拟机名称查找日志/var/log/apicom/taskmgr/bms/taskmgr_ecm_api.log/var/log/apicom/taskmgr/bms/taskmgr_ecm_executor.log3)  组合api两个节点是双主,根据裸金属服务器实例的名字查找本次发放的日志落到了哪个节点上cd /var/log/apicom/taskmgr/bms/;grep $bms_name *能查询到裸金属服务器名字的apicom节点处理了本地发放请求,在本节点查看apicom日志。4)vim taskmgr_ecm_executor.log;搜索裸金属实例名字,其中一行有“Create single server [$bms_name]“,本行末尾会有apicom的create bms 子jobID,再次搜索这个子 jobID,查看查询到的所有日志里的ERROR信息。(建议使用vim替换vi命令打开日志,搜索内容可以高亮显示)。根据ERROR信息分析失败原因。5)  如果executor日志中没有内容,vim taskmgr_ecm_api.log,查找发放时间点附近的error日志。当SC的订单里显示的失败原因为参数错误是,原因可以在taskmgr_ecm_api.log查找。5. ironic常用命令ironic node-list   查看裸金属服务器列表。第一列为node_id,第二列node_name,第三列node节点上的instance_id。ironic node-show  $node_id   查看裸金属服务器详情ironic node-set-maintenance $node_id   true/false   设置裸金属服务器维护态/非维护态。维护模式时表示裸金属服务器暂时脱离ironic管理,可以用于调试或硬件更换ironic node-set-provision-state  $node_id  deleted    恢复error状态的裸金属服务器ironic node-set-provision-state  $node_id  abort      中止正在格式化的裸金属服务器,会成为clean failed状态 ironic node-set-provision-state  $node_id  manageironic node-set-provision-state  $node_id  provide    manage+provide会重新clean 裸金属服务器。neutron port-list --network-id `neutron net-show provision |grep "\bid\b" |awk -F"|" '{print $3}'`   查看provision网络port列表neutron net-show provision   查看provision网络配置
  • [问题求助] 【应用侧API调试报错】
    【问题现象】使用官网提供的API调试工具(https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ListProperties)进行应用侧命令调试,查询设备属性发现报错,填的id等信息均准确,报错原因为命令超时,检查设备发现数据上报正常,报错文档说是要去确认设备是否收到平台的请求并订阅正确的topic且回复正确的响应给平台,未能理解是什么意思,还望解答解决办法。【截图信息】
总条数:1430 到第
上滑加载中