您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

即时微服务的逻辑和安全规则

时间:2023-12-14 12:30:57  来源:51CTO  作者:

译者 | 李睿

审校 | 重楼

本文将介绍如何在几分钟内而不是几周或几个月内构建一个完整的数据库系统:

(1)API:将添加用户界面(UI)和逻辑使其成为微服务

(2)逻辑和安全性:多表约束和派生,以及基于角色的安全性

(3)管理应用程序:最后构建一个多页面、多表格的Web应用程序

使用开源API逻辑服务器(API Logic Server)将提供:

关键特性

内容描述

重要性

自动化

•即时项目创建:一个API和一个管理Web应用程序

•解锁UI应用开发

定制

声明性逻辑和安全性

•5条规则vs 200行Python/ target=_blank class=infotextkey>Python代码

•减少40倍后端代码

迭代

•修改数据模型并添加规则,以及使用Python实现

•迭代开发

•Python的可扩展性

构建的过程只需要10分钟,而传统的开发过程则需要数周时间。

本文提供了以下几种方法:

  • 概念概述:本文侧重于概念和基本过程,其操作细节在附录中描述。
  • 自我演示:自己安装和创建这个数据库系统。
  • 带视频的自我演示:也可以使用这个视频(它是相同的数据库系统,但其数据库是用ChatGPT创建的)。

1.自动化:即时项目

这个项目是使用如下命令创建的:

$ ApiLogicServer create --project_name=basic_demo --db_url=basic_demo

注意:db_url是缩写。如果有自己的数据库,可以提供一个SQLAlchemy URI。

这将通过读取模式创建一个项目。数据库是客户(Customer)、订单(Orders)、项目(Items)和产品(Product),如附录所示。

可以用VSCode打开它,并按如下方式运行:

(1)创建虚拟环境:如附录所示。

(2)启动服务器:F5(也在附录中描述)。

(3)启动管理应用程序:使用IDE控制台中提供的链接或单击http://localhost:5656/。浏览器中应该出现如下所示的截图。

以下将探讨已经创建的数据库系统(这与通常的数据库类似)。

1.1 API与Swagger

数据库系统为每个表创建一个带有端点的API,具有过滤、排序、分页、乐观锁定和相关数据访问功能,这是一个自助式服务,为自定义应用开发做好准备。

即时微服务的逻辑和安全规则

1.2 Admin App

它还创建了一个管理应用程序(Admin App):多页面、多表,可用于业务用户的敏捷协作和后台数据维护。这为API创建的自定义用户界面(UI)提供补充。

可以单击客户2(Customer 2),并查看他们的订单和项目。

即时微服务的逻辑和安全规则

2.在IDE中自定义

虽然API/UI自动化是一个很好的开端,但实施逻辑和安全性至关重要。其方法如下:

下面的apply_customization过程模拟向项目添加安全性,并使用IDE在logic/declare_logic.sh和security/declare_security.py中声明逻辑和安全性。声明的安全性和逻辑显示在下面的截图中。

在项目的终端窗口中要应用自定义:

(1)停止服务器(红色停止按钮,或Shift-F5 -参见附录)

(2)自定义应用

# mac, linux
sh apply_customizations.sh
#windows
./apply_customizations.ps1

2.1声明安全性

上面的apply_customizations过程模拟了ApiLogicServer add-authcommand,并使用IDE在logic/declare_logic.sh中声明安全性。

以下是声明安全性的过程:

(1)启动服务器F5

(2)启动Admin应用程序:http://localhost:5656/

(3)登录账号为s1,密码为p

(4)点击客户

注意:

(1)管理应用程序现在显示的客户数量已经减少

(2)下面的截图说明了安全声明和操作:

  • 上面代码面板中的声明性授予,等等
  • 下面代码面板的日志记录,通过显示应用了哪些授权(+ Grant:)来帮助调试;

即时微服务的逻辑和安全规则

2.2声明逻辑

逻辑(多表派生和约束)是数据库系统的重要部分,通常占到将近一半。API逻辑服务器提供类似电子表格的规则,极大地简化和加速逻辑开发。

规则在Python中声明,并通过IDE代码完成简化。下面的屏幕显示了检查信用逻辑的5条规则。

上面的apply_customizations过程模拟了使用IDE在logic/declare_logic.sh中声明逻辑的过程。

可以查看运行中的逻辑:

(1)在管理应用程序中,注销(右上角),并以管理员(admin)身份登录。

(2)使用管理应用程序为客户1添加订单和项目(见附录)。

观察控制台日志中触发的规则,如下面的屏幕截图所示。

逻辑提供了对过程逻辑的显著改进,如下所述。

A.复杂性扩展

下面的截图显示了逻辑声明和插入项目(Item)的日志记录。每行表示一个规则触发,并显示该行的完整状态。

注意,这是一个多表事务,如缩进所示。这是因为-就像电子表格-规则自动链,包括跨表。

即时微服务的逻辑和安全规则

B.代码简洁40倍

5个类似电子表格的规则可以表示与200行代码相同的逻辑,如下所示。这在系统的后端减少了40倍代码。

C.自动再利用

以上的逻辑(可能是为Place order设计的)自动应用于所有事务:删除订单、更改项目、将订单转移给新客户等。这减少了代码,并提高了质量(没有遗漏的极端情况)。

D.自动优化

通过削减和消除昂贵的聚合查询,可以最小化SQL开销。这些可能导致数量级的影响。

E.规则透明

规则是一种可执行的设计。需要注意的是,它们完全映射到自然语言设计(如注释所示),可供业务用户阅读。

可以选择使用Behave TDD方法来定义测试,并且规则报告Rules Report将显示为每个测试执行的规则。

3.使用规则和Python进行迭代

类似于电子表格的规则不仅简洁了40倍的代码,而且还有效地简化了维护。举个例子:

购买10件或以上的碳中和产品,给予10%的折扣。

下面的apply_iteration过程模拟迭代:

  • 通过Product.CarbonNeutral获取一个新的数据库。
  • 发出ApiLogicServer rebuild-from-database命令,重建项目(数据库模型、API),同时保留上面所做的自定义设置。
  • 获取修改后的ui/admin/admin.yaml,在管理应用程序中显示这个新列。
  • 获得修改后的逻辑:在logic/declare_logic.py中,将model . item . amount公式的2行替换为以下内容(下一个截图显示了使用断点执行的修订逻辑):

 

def derive_amount(row: models.Item, old_row: models.Item, logic_row: LogicRow):
 amount = row.Quantity * row.UnitPrice
 if row.Product.CarbonNeutral and row.Quantity >= 10:
 amount = amount * Decimal(0.9) # breakpoint here
 return amount
 Rule.formula(derive=models.Item.Amount, calling=derive_amount)

要应用这个迭代,在项目的终端窗口中:

(1)停止服务器(红色停止按钮,或Shift-F5 -参见附录)

(2)应用迭代

# mac, linux
sh apply_iteration.sh
#windows
./apply_iteration.ps1

(3)设置断点,如下图所示。

(4)测试:启动服务器,以管理员身份登录。

(5)使用管理应用程序通过添加12个绿色项目来更新订单。

在断点处,可以使用标准调试器服务来调试逻辑(检查项目属性、步骤等)。

即时微服务的逻辑和安全规则

这个简单的例子说明了迭代的一些重要方面,将在以下的小节中描述。

3.1.维护自动化

除了编写文档之外,开发人员最讨厌的任务之一就是维护代码。这是因为这与编写代码无关,而是需要理解和破译别人编写的代码,这样就可能添加4或5行代码,这些代码有望被调用并正确运行。

规则改变了这一点,因为它们基于系统发现的依赖关系对它们的执行(和修改)进行自我排序。因此要更改逻辑,只需“在桶中放入一个新规则”,数据库系统将确保以适当的顺序调用它,并在所有应用的用例中重复使用。维护速度更快,质量更高。

3.2使用Python扩展

在这种情况下,需要进行一些if/else测试,添加少量Python非常方便。即使对于Python新手来说,使用“Python作为4GL”也非常简单。

当然,拥有Python及其许多库的全部面向对象功能,因此不存在自动化惩罚限制。

3.3调试:IDE和日志记录

上面的屏幕截图说明了调试逻辑是人们所期望的:使用IDE的调试器。这种“基于标准”的方法适用于其他开发活动,例如源代码管理和基于容器的部署。

3.4自定义保留

需要注意,这是从修改后的数据库重新构建项目的,这说明可以在保留自定义的同时进行迭代。

4. API定制:标准

当然,众所周知,全世界的所有业务都依赖于“hello world”应用程序。这是在api/customize_api中提供的。

  • 标准Python
  • 使用Flask
  • 对于数据库访问,SQLAlchemy:注意所有来自自定义API的更新也会强制执行其逻辑。

5.部署容器:协作

API逻辑服务器还创建用于部署的脚本。虽然这一演示不需要这些功能,但这意味着可以与业务用户进行协作:

(1)从项目创建一个容器。参见devops/Docker-image/build_image.sh

(2)上传到Docker Hub

(3)部署敏捷协作

结语

即时微服务的逻辑和安全规则

以上在几分钟内而不是几天或几周内,使用API逻辑服务器将一个想法转换为可工作的软件,自定义逻辑和安全性,并迭代以满足新的需求。

要想深入了解,可以安装API逻辑服务器并执行这个演示,或者从自己的数据库创建一个系统。

附录:数据库架构

即时微服务的逻辑和安全规则

附录:程序

这里提供了运行演示的具体过程,因此它们不会影响上面的概念讨论。

可以使用VSCode或Pycharm。

附录1.建立虚拟环境

Python为特定于项目的依赖项使用虚拟环境。根据IDE创建一个如下所示的文件。

VSCode:

建立venv,并通过第一个预构建的run Configuration运行它。以下建立venv:

python -m venv venv; venvScriptsactivate # win
python3 -m venv venv; . venv/bin/activate # mac/linux
pip install -r requirements.txt

对于PyCharm,将获得一个对话框,要求创建venv,然后确定。

附录2.启动和停止服务器

两个IDE都提供运行配置来启动程序。这些都是由ApiLogicServer create预先构建的。

对于VSCode,用F5启动服务器,用Shift-F5或红色停止按钮停止。

对于PyCharm,使用ctrl - d启动服务器,并使用红色停止按钮停止。

附录3.进入新订单

进入新订单:

(1)点击“客户1”。

(2)点击+“添加新订单”。

(3)将Notes设置为“忙碌”,然后按“保存”和“显示”。

(4)点击+“添加新项目”。

(5)输入数字1,查找“产品1”(Product 1),然后单击“保存并添加另一个”。

(6)输入数字2000,查找“产品2”(Product 2),然后单击“保存”。

(7)观察约束错误,它是由项目到订单和客户的滚动触发的。

(8)将数量修改为2,然后单击“保存”。

附录4. 更新订单

探索绿色产品的新逻辑:

(1)访问之前的订单,并添加新项目。

(2)输入数字11,查找绿色产品,然后单击“保存”。

附录:添加数据库列

这里的数据库是SQLite。可以使用SQLite CLI在IDE的终端窗口中添加一个列:

$ sqlite3 database/db.sqlite
> alter table Products Add CarbonNeutral Boolean;
> .exit

SQLite DBMS安装了API逻辑服务器,但不是所有系统都提供CLI。如果没有安装,则需要安装。

原文标题:Instant Microservices: Rules for Logic and Security,作者:Val Huber



Tags:微服务   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  Search: 微服务  点击:(4)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  Search: 微服务  点击:(114)  评论:(0)  加入收藏
九条微服务最佳实践,你学会了哪条?
微服务之间连贯一致的代码库对于可维护性至关重要。保持代码成熟度相似,可确保系统统一演进,防止服务间出现性能、安全性和功能差异。在开发微服务时,我们需要遵循哪些最佳实践...【详细内容】
2024-01-05  Search: 微服务  点击:(97)  评论:(0)  加入收藏
Go微服务入门到容器化实践
Go微服务入门到容器化实践Go 是一门高效、现代化、快速增长的编程语言,非常适合构建 Web 应用程序。而 Docker 是一种轻量级的容器化技术,能够使得您的应用程序在任何地方运行...【详细内容】
2024-01-01  Search: 微服务  点击:(61)  评论:(0)  加入收藏
微服务全做错了!谷歌提出新方法,成本直接降为1/9!
2023,微服务“水逆”之年。长期以来,不管大厂还是小厂,微服务都被认为是云原生服务应用程序架构的事实标准,然而2023,不止那位37signals的DHH决心下云,放弃微服务,就连亚马逊和谷歌...【详细内容】
2023-12-29  Search: 微服务  点击:(117)  评论:(0)  加入收藏
微服务架构中的数据一致性
在微服务中,一个逻辑上原子操作可以经常跨越多个微服务。即使是单片系统也可能使用多个数据库或消息传递解决方案。使用多个独立的数据存储解决方案,如果其中一个分布式流程参...【详细内容】
2023-12-27  Search: 微服务  点击:(141)  评论:(0)  加入收藏
监控 Spring Cloud 微服务的实践方案
一、简介Spring Cloud是一个基于Spring Boot实现的微服务框架,它提供了丰富的微服务功能,如分布式配置、服务注册与发现、服务熔断、负载均衡等。为了更好地管理和监控这样复...【详细内容】
2023-12-19  Search: 微服务  点击:(141)  评论:(0)  加入收藏
聊聊微服务链路服务
微服务架构图片如果有用户反馈某个页面很慢,我们知道这个页面的请求调用链是 A -----> C -----> B -----> D(图片有误),怎么来定位是由哪个服务引起的问题呢? 更进一步,如果...【详细内容】
2023-12-15  Search: 微服务  点击:(123)  评论:(0)  加入收藏
选择适合微服务的编程语言,让你的工作事半功倍!
讨论编程语言就像是一场政治辩论。每个开发者都会过分捍卫他/她所使用的编程语言。然而,编程语言应该被看作是它们真正是的东西,即一种工作工具。每种编程语言都有特定的目的...【详细内容】
2023-12-14  Search: 微服务  点击:(177)  评论:(0)  加入收藏
Eureka: 微服务架构中不可或缺的服务治理工具
Eureka是Netflix开源的一款用于服务治理的工具,它是NetflixOSS(OpenSourceSoftware)项目的一部分,主要用于实现微服务架构中的服务注册与发现。在当今庞大而复杂的微服务系统中,E...【详细内容】
2023-12-14  Search: 微服务  点击:(190)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(4)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(11)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(5)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(8)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(114)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(115)  评论:(0)  加入收藏
站内最新
站内热门
站内头条