python搭建微服务服务器

在Python中搭建有效的微服务架构

TL; 博士:API(应用编程接口)优先方法是Connexion(联接)搭建有效的微服务的有力工具。使用API的好处是满足了客户期望。除此之外,使用Connexion将使你在Python中开发API变得更加流畅。


Google在收购Apigee时强调了应用程式界面在当今应用程序架构中的重要性。使用具有精心设计的API微服务对于保持业务成功至关重要,因为它简化了复杂软件解决方案的开发。成长型公司历经企业复杂性而自然提高,这种复杂性来自市场变化和为了迎合客户的需求。像Zalando公司,面临这样的挑战,选择采用微服务。 微服务的采用旨在使其更易于构建和维护其应用程序。

微服务是一种将复杂的软件解决方案分解成更小的可组合服务的风格,这些小型服务可以独立维护和部署。每个服务都围绕通常提供REST API(应用编程接口)的业务功能开发。清楚地说明每个服务提供什么功能可以对团队构建和维护其微服务的生产力产生巨大影响。微服务开发人员应向客户端开发人员提供构建和维护网络,移动或其他服务,描述如何使用他们的REST API。未能清楚地描述一个API和维护一个最新的文档会导致系统设计的崩坏并造成团队成员的挫败感。API优先方法正在成为解决这些问题的解决方案。


API优先方法

API方法最近已经添加到应用程序开发方法的最初12个因素中 - 一组规则和指导方针用来开发强大的应用程序,一群经验丰富的开发人员想出了构建Heroku平台。它是专注于API规范开发过程中的第一级神器,并用它们作为软件开发者和团队之间共享合同的方法。甚至在编写第一行代码之前,构建规范的服务也可以促进API的潜在用户的审核,创建API的模拟,以及生成文档。


Google,IBM,Microsoft和其他公司已经携手创建了开源API计划(OAI),以支持定义和建立一个独立于供应商的格式,用于描述称为开放API规范(以前称为Swagger 2.0)的REST API。 还有其他可用于描述API的格式,可以与API优先方法一起使用,最著名的是API Blueprint和RAML,但是开源API格式目前拥有更大的用户和支持者社区。 从使用开源API格式编写的规范,可以容易地生成用于实现的初始代码。 支持许多语言和框架:Ruby,Java,Node,C#等。对于Python,Connexion是API优先最佳选择,因为它既不依赖代码生成也不需要样板代码。


Connexion是一个建立在Flask之上的开源框架,它根据API First方法促进了Python中的Microservices的开发。 它是由Zalando创建的,以满足这种解决方案的内部需求。 Connexion正在积极发展,我是该项目的主要维护者之一,还有Joao Santos和Henning Jacobs。


建立在Python中一个简单的服务

在Python中构建有效微服务的第一步是在我们的API中使用开源API规范。我们将专注于描述什么路线,参数,负载和响应代码我们的API产品。我们从一个简单的端点示例开始,该端点响应字符串“Hello API!”。

blob.png

在上面的代码块中,我们指定了我们的API有一个端点“/ greeting”,接受方法为“GET”的请求,并返回状态码200,表示成功。 注意,我们的规范中没有定义业务逻辑,这部分是由我们的端点实现的,这将在Python中完成。“operationId”是什么定义取决于你对你的的端点进行API调用时执行哪个Python函数。

blob.png

如你所见,Connexion API的处理程序是免费的样板代码。返回简单数据结构的普通Python函数用作API调用的处理程序。 处理程序返回的数据结构可以通过Connexion针对API规范进行验证(如果指定的话)。 默认情况下禁用此验证以在开发期间授予灵活性。 现在我们可以使用Connexion将我们的代码粘贴到API规范,并让服务器运行。 运行我们的API的最简方法是使用Connexion CLI工具:

blob.png

现在我们可以去浏览器并访问地址http:// localhost:5000 / greeting,我们应该能够看到消息:

blob.png


为了使其更具动态性,我们可以更改我们的规范,为用户名添加HTTP参数。 为此,我们的规范应该看起来像这样:

blob.png

现在Connexion将一个可选参数传递给我们的函数。 为了处理,我们还必须改变我们的Python函数。

blob.png

我们的Python代码现在匹配API规范。 现在我们可以重新启动我们的服务器,按Ctrl + C并再次运行以下命令来查看这些更改。

blob.png

我们的服务器再次监听http:// localhost:5000 / greeting。 此外,现在可以传递可选数“name”。 Connexion包括可在http:// localhost:5000 / ui上使用的API控制台界面。 默认情况下,启用此控制台UI可以轻松调用API的端点。 它还用作我们微服务的文档。


现在我们知道如何创建Connexion应用程序的基础知识,有关更详细的示例,请检查Github上提供的Connexion示例项目。Connexion的官方文档是一个完整的信息资源,在使用Connexion开发RESTful微服务时,应使用此文档作为参考。


向前进

公司们开始意识到API优先方法的好处。 Etsy发表了一篇博文,描述了API优先方法如何帮助他们通过提供一致的API来解决挑战。 在Zalando,API优先方法是他们的软件开发生命周期的核心,有一个同行评审反馈过程和创建RESTful微服务的指南,这些都是可用的开源。


我们可以发现许多支持API优先方法的开源工具,可用于多种语言。Connexion是在Python中干净实现API优先方法的完美框架,并且在积极开发中。Connexion不依赖代码生成。 这使得您可以自由地演变您的API规范,而不破坏已经实现的代码。

_size = enc_hiddens.shape[1] y_t = torch.tensor([self.vocab.tgt['<s>']] * batch_size,搭建一个微服务项目可以分为以下主要步骤: 1. 架构设计:确定微服务架构,包括 device=enc_hiddens.device).unsqueeze(0) # (1, batch_size) h_t, c_t = dec_init_state context = torch.zeros(batch_size, self.hidden_size*2, device=enc_hiddens.device) # (batch_size服务拆分、服务通信、服务治理等方面。 2. 技术选型:选择合适的技术栈, hidden_size*2) # initialize hypothesis hypo = [Hypothesis([self.vocab.tgt['<s>']], ,比如 Spring Cloud、Dubbo、ServiceComb 等。 3. 基础设施搭建搭建微服务基础设施,包括注册中心、配置中心、网关、链路追踪等。 4. 业务实现:0.0)] completed_hypo = [] for _ in range(max_length): # generate all possible next hypothesis 实现微服务业务逻辑,并进行集成测试、系统测试、性能测试等。 下面我将对每个 all_hypo = [] for h in hypo: if h.value[-1] == self.vocab.tgt['</s>']: 步骤进行详细的解释: 1. 架构设计: 在确定微服务架构时,需要考虑以下方面 completed_hypo.append(h) continue y_emb = self.model_embeddings.target(y_t) # (1, batch_size,: - 服务拆分:将业务功能拆分成不同的服务,每个服务都有独立的职责 embed_size) h_t, c_t, context, attention = self.step(y_emb.squeeze(0), h_t, c_t, enc和功能。 - 服务通信:服务之间需要通过某种方式进行通信,比如 RESTful API、RPC 等_hiddens, context) # h_t: (batch_size, hidden_size), c_t: (batch_size, hidden_size), context。 - 服务治理:需要对服务进行管理和监控,包括服务注册、服务发现、负载均衡: (batch_size, hidden_size*2), attention: (batch_size, src_sent_len) combined_output = self.combined_output、熔断降级等。 2. 技术选型: 在选择技术栈时,需要考虑以下方面: -_projection(torch.cat((h_t, context), dim=1)) # (batch_size, hidden_size) combined_output = torch.tanh 语言:选择适合你的业务场景的编程语言,比如 Java、Go、Python 等。 -(combined_output) target_vocab_dist = self.target_vocab_projection(combined_output) # (batch_size, tgt_vocab_size) 框架:选择适合你的业务场景的框架,比如 Spring Cloud、Dubbo、ServiceComb 等。 - topk_probs, topk_idx = target_vocab_dist.topk(beam_size, dim=1) # (batch_size, beam_size 中间件:选择适合你的业务场景的中间件,比如 Redis、MySQL、Kafka 等。 3) for i in range(beam_size): new_hypo = Hypothesis(h.value + [topk_idx[0][i. 基础设施搭建: 在搭建微服务基础设施时,需要考虑以下方面: - 注册].item()], h.score + topk_probs[0][i].item()) all_hypo.append(new_hypo) # sort hypothesis中心:用于服务注册和发现,比如 Eureka、Consul 等。 - 配置中心:用于配置 by descending score and select top k sorted_hypo = sorted(all_hypo, key=lambda h: h.score, reverse=True) hypo = sorted_hypo[:beam_size] # check if all hypothesis have completed if all([h.value[-1]管理,比如 Spring Cloud Config、Apollo 等。 - 网关:用于 API 网关和请求转发,比如 Zuul == self.vocab.tgt['</sGateway 等。 - 链路追踪:用于分布式链路追踪和性能监控,比如 Zipkin、SkyWalking 等。 4. 业务实现: 在实现微服务业务逻辑时,需要考虑以下方面: - 服务开发:编写业务逻辑代码,并进行单元测试和集成测试。 - 服务部署:将服务部署到云平台或服务器上,并进行系统测试和性能测试。 - 服务监控:对服务进行监控和管理,包括日志管理、指标监控、告警等。 以上是搭建一个微服务项目的主要步骤,需要注意的是,在实际项目中,还需要考虑很多其他方面的问题,比如安全、容灾、自动化运维等。如果你需要更多帮助,可以提出具体问题,我会尽力帮助你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值