热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微服务和传统架构区别,微服务技术框架

为了能够尽快上线,MyShop团队的架构师设计了v2架构,它为App端新增了一个Nginx反向代理,可以使App入口直接访问API微服务。可以看到,引入了BFF之后,降低了App端


一、从一个MyShop上,为了说明BFF是什么,这里我引用了波波老师在《Spring Boot与K8s云原生应用开发》课学到的一个例子,给大家分享,尽力弄清楚BFF是什么,是怎么进化的。


假设我们是一个开发团队,开发了一个名为MyShop的电子商务项目,该项目采用了微服务体系结构风格。 由于经历了几次体系结构调整,让我们来看看BFF是如何发展的。


假设v1、8年前,MyShop已经采用了服务化的体系结构,客户端也主要围绕传统的web APP应用程序。 当时,SOA的框架已经赶上了流行。


转眼间,四五年前,我的手机升级到了v2版本。 其体系结构如下图所示。


可见,如今已经进入移动互联网时代,MyShop也在顺应时代推出自己的无线APP。 为了尽快上线,MyShop团队的架构师设计了v2体系结构。 这将向App端添加Nginx反向代理,以便App门户可以直接访问API微服务。


但是,该v2体系结构存在以下问题:


)1) APP端和内部API微服务存在较强的耦合关系(包括接口耦合和域名耦合),任何一方的变化都会对另一方产生一定的影响。


)2)每项暴露于外界的服务都需要新的域名,域名需要购买,需要承担成本。


)3)内部API微服务一下子暴露于公共网络,存在较大的安全风险。


)4) APP客户端需要开发大量的聚合裁剪逻辑,客户端是繁重的、重复的劳动。 (解释聚合裁剪是指聚合需要一次从多个微服务检索数据并集成使用,而裁剪是指需要过滤微服务返回的数据,可能只使用其中的部分字段数据。)


二、由于引入BFF的MyShop v2.5在v2版本中存在的问题太多,架构团队决定在Nginx和内部API微服务之间引入无线bff(3358www.Sina.com/)来解决这个问题


可以将BFF视为后端微服务的代理服务,它主要提供聚合和裁剪逻辑,便于客户端访问和访问。 可以看到,BFF部署后,App端和后端微服务器之间的绑定减少了,避免了v2版本中提到的强绑定问题。 另外,APP方只要知道BFF的域名即可,内部微服务器也无需隐藏在BFF之后再暴露于公众网。


v2.5版本解决了许多问题,因此成功上线,也为MyShop无线业务的发展提供了巨大的支持。


但是,随着业务的迅速发展,一张无线BFF上积累了大量不同业务线的逻辑越来越庞大,升级和维护也越来越困难。 另外,根据康威定律,单个无线BFF和多个团队也发生了失配。 这意味着团队间的交流成本更低,交付成本也更高。 最后,无线BFF中除了多业务聚合裁剪逻辑外,还引入了安全认证、日志监控、限流熔断等Cross-Cutting (横截面)逻辑。 随着时间的推移,代码越来越复杂,技术堆栈越多,开发效率也越低。 (当然,也有单点问题等,但这里不怎么说明)


三、为了解决网关BFF模式MyShop v3在v2.5版本中存在的问题,架构团队进一步考虑后决定,一方面对单个无线BFF进行解耦分割,为不同业务线引入独立的微服务集群另一方面,决定在无线BFF和Nginx之间引入API网关这一新的作用,将结算的作用转移到API网关。 从那以后,v3体系结构出现了,如下图所示。


在v3体系结构中,BFF按团队或业务线边界划分,每个业务线团队可以并行开发和交付各自的BFF。 网关由单独的中间件或框架团队开发和维护,专注于路由和结算级别的功能构建,而业务线团队则专注于业务逻辑的开发。 我们. NET程序员熟悉的Ocelot网关项目(是的,由自然计算机参与并做出贡献的网关项目)是限流熔断、集中认证) IdentityServer集成、负载平衡和呼叫跟踪


四.乘风破浪的MyShop v4是最近一两年吧。 MyShop团队希望迎接新的业务和技术发展需求,开放内部企业级能力建设开放API开放平台,并借助第三方力量在MyShop平台进行创新创造生态,丰富MyShop的应用形态。 它还需要访问多种类型的APP应用程序客户端,包括SPA单页APP应用程序和H5前后端隔离APP应用程序。 体系结构团队设计了下图所示的v4体系结构,以满足快速增长的现有和未来可能的需求。


在v4架构中,我们删除了传统的离线维级别的Nginx反向代理,而是统一使用可变成型的强网关作为客户端APP应用程序门户。 当然,这里引入了一些其他LB服务进行了网关层的负载均衡。 这里的网关也进行解耦,针对不同的客户端APP应用场景,分为开放平台网关、H5网关、无线网关、web APP应用网关四种类型。 在BFF级别,根据业务线分为无线BFF、H5 BFF、开放平台BFF。 体系结构整体级别清晰、责任明确、灵活,易于支持MyShop业务快速发展。 我相信,通过查看这里,您将看到BFF是什么,它在微服务体系结构中的位置和作用,以及它是如何演变的。


英文全称:Backend For Frontend,指为前端应用开发的后端服务如果你还不明白,再看一遍!


推荐阅读
  • 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)【下载本文PDF进行阅读】设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践。在经过多年的软件开发实践之后,回过头 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
author-avatar
Binggo89
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有