首页 > 其他分享 >微服务架构分层和前后端分离

微服务架构分层和前后端分离

时间:2023-03-12 22:36:36浏览次数:37  
标签:前后 架构 分离 站点 分层 服务 数据

本文依旧主要参考沈剑大佬的微服务设计相关的五篇博文及其精彩评论,文末是完整参考。

程序就是:数据的传输、数据的转换、数据的存储。

1、分层架构

1.1 典型的互联网分层架构

  • 客户端层
  • web 站点层
  • 业务服务层:整个多个相关单一服务的数据,对外提供通用功能,减少重复代码
  • 数据库访问层:对外提供某个系统的数据访问服务、
  • 数据存储层:db/缓存

1.2 分层架构的本质

互联网分层架构的本质,是数据的移动。

一般数据处理都是通过移动数据,固定 CPU 来实现的。

  • 跨进程移动:数据从数据库和缓存里,转移到service层,到web-server层,到client层
  • 同进程移动:数据从model层,转移到control层,转移到view层

互联网分层架构中,数据的传输格式(协议)与数据在各层次的形态很重要

1.3 “分层架构演进”的核心原则与方法

分层的目的:遵循单一职责原则,对系统进行模块化拆分封装,实现服务自治,复用解耦,便于系统的维护和水平扩展。

  • 让下游能屏蔽数据的获取细节,封装
  • 让上游更高效的获取与处理数据,复用

1.4 微服务拆分的时机

数据访问层拆分

当业务越来越复杂,垂直拆分的系统越来越多,数据库实施了水平切分,数据层实施了缓存加速之后,底层数据获取复杂性成为通用痛点的时候,就应该抽象出数据访问层,简化数据获取过程,提高数据获取效率,向上游屏蔽底层的复杂性。

业务服务层拆分

业务越来越复杂,垂直拆分的子系统增加,数据访问层服务逐渐增加,各个子系统的web站点层可能需要整合多个数据访问层服务或者其他相关的单一服务的数据,甚至子系统之间出现了一些重复性的整合工作,这时可以把共同的功能抽象出业务服务层,简化数据处理和调用过程,向 web 站点层屏蔽底层的复杂性。

1.5 微服务拆分可能带来的问题

  • 本地调用变成远程调用,请求处理时间可能会增加
  • 系统复杂性上升,运维可能更加复杂()
  • 定位问题可能会更加麻烦

2、前后端分离

2.1 什么时候可以考虑前后端分离

当展示层也就是前端页面变化频繁,但是很少涉及业务逻辑的改动,避免每次页面改动牵连后端一起部署上线,单次上线成本和复杂度较高时;

或者需要支持多端,可能需要复制多份 web站点层的代码,引入的大量重复代码极大降低系统的可维护性。

2.2 怎么分离

web 站点层分成站点展示层和站点数据层

  • 站点展示层用于数据展示和用户交互,由前端开发和维护;
  • 站点数据层负责业务逻辑和向前端提供数据,由后端开发维护,前端拿到数据后进行展示渲染。

2.3 好处

1、多端的业务,只需前端的站点展示层部署多套即可,后端的站点数据层只需部署一套服务,站点展示层通过不同的传参或者调用不同的接口来获得自己想要的数据。

2、前后端分离维护、开发和部署,前后端解耦合,提高可维护性,简单的前端修改无需重新修改和部署后端。

3、约定好交互接口后,前后端并行开发,加快产品迭代速度。

2.4 缺点

1、数据和页面分离,需要等 js 请求到完整数据后才能展示完整的网页,但是部分搜索引擎的 spider 爬虫可能不支持执行 js,从而只抓到了没有数据的页面,导致影响网页的 SEO(Search Engine Optimization,搜索引擎优化)。

2、产品开发需要提前约定好接口变动,且增加联调环节,从而增加了沟通成本,可能导致产品迭代的速度降低

3、前端越来越专业,对前端同学的综合能力要求越来越高

3、问题:

问:什么系统是移动 cpu,而不是移动数据

hadoop和spark等大数据处理系统,因为大数据处理的场景下,数据量太大,数据传输需要的时间长。

问:服务器消息超时重发机制是否可以采用监听redis超时机制来实现?或者有没有其他更好的办法?

定时器或者消息队列的延迟消息做超时重发比较合适。redis 太重。

问:对于一些原本可以直接join的表被分库分表了,那dao层如何去用实现他们的 join 呢

高并发量,大数据量的场景下,不推荐使用 join,效率太低,推荐转换成在服务层多次查询数据,或者存储冗余数据。

问:第三方接口查询慢怎么办

如果第三方接口数据变化频度不高,且业务接受一定延迟,可以考虑使用 redis 把第三方接口数据缓存下来,定期刷新 redis 缓存。

问:浏览器和 app 两种客户端,服务端返回的数据格式是一样的吗

浏览器返回的是 html 或者 json 个数的数据,app 一般返回都是 json 格式的数据,在本地客户端进行渲染。

问:前后端联调时间长可能是什么原因

1.前后端联调合作磨合时间短,

2.前后端理解的业务或者接口参数不一致。

问:循环依赖怎么解决

架构设计不合理,分层架构,上游调用下游,下游不能调用上游,非要交互可以采用消息队列 MQ 来实现。

问:运营管理 admin 系统,建议做前后端分离吗

后台系统对交互/体验要求不高,也就是可能不需要支持多端且页面改动不频繁,前后端分离可做可不做。

问:前端的站点展示层是怎么部署的

NodeJs吗,还是直接部署静态页面。

4、完整参考

互联网分层架构的本质

互联网分层架构之-DAO与服务化

啊,业务层是否也需要服务化?

互联网分层架构,为啥要前后端分离?

分层架构,前后端分离有啥坏处?

究竟为什么要引入数据库中间件

标签:前后,架构,分离,站点,分层,服务,数据
From: https://www.cnblogs.com/hi3254014978/p/17209402.html

相关文章

  • 大型电商网站系统架构分层设计
    DevOps人员需要了解公司的网站架构设计,如果牵涉了具体的高流量高并发的场景,那么,此时也需要提供实际的解决方案,所以了解网站的分层系统架构设计是非常有必要的。网站架构一般......
  • 架构EBI、DDD、端口适配、洋葱、整洁
    领域驱动架构及其演变史(EBI、DDD、端口适配、洋葱、整洁)一、引子聊架构总离不开“领域驱动架构”,大多能聊到DDD(Domain-DrivenDesign),实际上早期思想EBI架构1992年就诞......
  • 分层测试以获得对代码的信心
    令我震惊的是,很少有开发人员了解综合测试。我经常收到开发人员发来的电子邮件,担心他们缺乏测试经验。说实话,他们应该担心!测试是没有商量余地的。顶级公司——以及我工作......
  • mvc架构
    dao层dao层主要做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此dao层的设计设计dao层的接口在Spring的配置文件中定义此接口的实现类在模块中调用此接口来进......
  • AI编译器及TVM整体架构
    虽然之前也依据tvm官方文档写过一篇关于TVM架构的博客,但总感觉属于一种身在此山中的感觉(偏向于TVM实现的各个模块),并没有一览众山小的即视感(对框架的整体理解)。因此,今......
  • 网站架构总结图
     网站的高性能架构        ......
  • 大型网站核心架构要素
     0、网站架构五要素当前互联网架构设计主要包括五要素:性能、高可用、伸缩性、拓展性、安全性,以下篇幅将对这五要素做具体或者简略的介绍。一、性能篇性能主......
  • 【云计算】阿里云云计算架构师ACE成长路线v2
    1、缘起ACA好几个月前看到了架构师就想考,一直没机会。暑假放假后,本来想从ACA学起的,结果意外的机会开始乱搞,一星期就拿到了ACP的证书。ACE架构师似乎就没那么简单了,可能要......
  • Nginx配置实例-动静分离实例:搭建静态资源服务器
    什么是动静分离Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解......
  • 系统架构设计师考试知识点整理-4:死锁问题、银行家算法、管程与线程
    死锁问题1.死锁是指多个进程之间相互等待对方的资源,而在得到对方资源之前又不释放自己的资源所造成的循环等待的现象。2.死锁产生的根本原因在于系统提供的资源少于并发进程......