Ballerina是一种通用的,并发的和强类型的编程语言,具有文本和图形语法,可以更好地集成
我正在学习微服务,我将构建一个带有微服务架构的项目.
问题是,我的一个队友希望为所有服务使用一个数据库,共享所有表,以便"数据不会重复",每个服务都将使用不同的框架和语言构建,如django和rails使用非常不同的ORM标准.
什么是正确的方法?因为我认为使用一个数据库会涉及很多"黑客攻击"ORM,以使它们正常工作.
我以为我知道REST /"RESTFul",restfulservices,webservices,SOA和微服务是什么,但我遇到了很多不同的定义,我得出的结论是这些术语被过度使用,误用或者只是定义得很糟糕.
我希望能清楚地理解上述术语代表什么,它们的具体定义,它们的共性和差异,优点和缺点,最重要的是底线 - 为了适当地使用这些术语而要记住的最重要的事情.
当前架构:
问题:
我们在前端和后端层之间有两步流程.
微服务2(MS2)需要验证来自前端的I1的完整性.如何避免对MS1的新查询?什么是最好的方法?
流程我正在尝试优化删除步骤1.3和2.3
流程1:
流程2:
途径
一种可能的方法是在MS2和MS1之间使用B2B HTTP请求,但我们将在第一步中复制验证.另一种方法是将数据从MS1复制到MS2.然而,由于数据量和它的波动性,这是令人望而却步的.复制似乎不是一个可行的选择.
我认为更合适的解决方案是前端有责任获取微服务2上的微服务1所需的所有信息并将其传递给微服务2.这将避免所有这些B2B HTTP请求.
问题是微服务1如何信任前端发送的信息.也许使用JWT以某种方式对来自微服务1的数据进行签名,并且微服务2将能够验证该消息.
注意 每次微服务2需要来自微服务1的信息时,执行B2B http请求.(HTTP请求使用ETAG和缓存控制:max-age).怎么避免这个?
建筑目标
微服务1需要来自微服务2的数据,以便能够在MS1数据库上保持MS1_Data和MS2_Data,因此使用代理的ASYNC方法不适用于此.
我的问题是,是否存在设计模式,最佳实践或框架,以实现这种推力沟通.
当前体系结构的缺点是在每个微服务之间执行的B2B HTTP请求的数量.即使我使用缓存控制机制,每个微服务的响应时间也会受到影响.每个微服务的响应时间至关重要.这里的目标是存档更好的性能,以及如何使用前端作为网关在多个微服务之间分配数据,但使用推力通信.
MS2_Data只是MS1必须用于维护数据完整性的产品SID或供应商SID的实体SID.
可能解决方案
这个想法是使用网关作为api网关请求处理,它将缓存来自MS1和MS2的一些HTTP响应,并将它们用作对MS2 SDK和MS1 SDK的响应.这样,在MS1和MS2之间不直接进行通信(SYNC或ASYNC),也避免了数据复制.
当然,上述解决方案仅适用于跨微服务的共享UUID/GUID.对于完整数据,事件总线用于以异步方式(事件源模式)跨微服务分发事件和数据.
灵感:https://aws.amazon.com/api-gateway/和https://getkong.org/
相关问题和文档:
architecture design-patterns data-sharing microservices aws-api-gateway
我试图在我的.NET核心2.0项目中使用Docker功能时遇到错误.我一直在收到一条错误消息
Visual Studio容器工具要求在构建,调试或运行容器化项目之前运行Docker.有关详细信息,请参阅:http://aka.ms/DockerToolsTroubleshooting
我按照链接,一旦意识到我有Windows 10 Home x64,并且不得不安装Docker Toolbox,而不是Docker For Windows.现在它安装了这个可执行文件
Docker快速入门终端
这是应该启动Docker服务的方式吗?我试过运行这个可执行文件,它似乎正在工作.我的容器正在运行,但Visual Studio容器工具的错误仍然存在.
我错过了什么?为了在Visual Studio 2017中使用Docker容器支持,是否有高于Home所需的Windows版本?
更新:
我试图遵循Quetzcoatl的建议,我仍然在视觉工作室中得到关于这些工具的相同错误.这是我在Docker快速启动终端中运行的内容.我尝试在Visual Studio成功打开项目后构建项目,并且仍然收到有关容器工具的上述错误.
我的devenv.exe文件位于
C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe
我的解决方案文件位于
D:\ Development\Visual Studio\Musify2\Musify2\Musify2.sln
更新2:
在基于微服务的系统中实现数据库一致性的最佳方法是什么?
在柏林的GOTO,Martin Fowler谈论微服务,他提到的一个"规则"是保留"每服务"数据库,这意味着服务不能直接连接到另一个服务"拥有"的数据库.
这是超级优雅和优雅,但在实践中它变得有点棘手.假设您有一些服务:
现在,客户在您的前端进行购买,这将调用订单管理服务,这将保存数据库中的所有内容 - 没问题.此时,还会拨打忠诚度计划服务,以便从您的帐户中记入/记入积分.
现在,当所有内容都在同一个DB/DB服务器上时,一切都变得简单,因为您可以在一个事务中运行所有内容:如果忠诚度计划服务无法写入数据库,我们可以回滚整个事情.
当我们在多个服务中执行数据库操作时,这是不可能的,因为我们不依赖于一个连接/利用运行单个事务.什么是保持事物一致并过上幸福生活的最佳模式?
我非常渴望听到你的建议!并提前致谢!
我看到越来越多的软件组织在面向服务的体系结构中使用gRPC,但人们仍然在使用REST.在什么用例中使用gRPC是有意义的,何时使用REST进行服务间通信是有意义的?
有趣的是,我遇到过使用REST和gRPC的开源项目.例如,Kubernetes和Docker Swarm都在某种程度上使用gRPC进行集群协调,但也公开REST API以与主/领导节点连接.为什么不上下使用gRPC?
据我所知,"服务发现"是指客户端了解它想要连接的服务器(或服务器集群)的方法.
我构建了使用HTTP和AMQP等协议与其他后端进程通信的Web应用程序.在这些客户端中,每个客户端都有一个配置文件,其中包含主机名或连接到服务器所需的任何信息,这些信息在部署时使用Ansible等配置工具进行设置.这很简单,似乎工作得很好.
服务发现是否只是将服务器信息放在客户端的配置文件中?如果是这样,为什么它更好?如果没有,它解决了什么问题?
我没有找到一个现有的帖子问这个但是如果我错过它就道歉.
我试图让我的头部微服务,并遇到使用RabbitMQ的文章.我很困惑为什么需要RabbitMQ.服务是否意图使用web api与外界通信,RabbitMQ是否相互通信?
microservices ×10
architecture ×4
database ×2
rest ×2
soa ×2
asp.net-core ×1
ballerina ×1
c# ×1
data-sharing ×1
docker ×1
docker-swarm ×1
grpc ×1
kubernetes ×1
orm ×1
rabbitmq ×1
web-services ×1
wso2 ×1