当前位置: 首页 > 科技观察

当我们准备做前后端分离的项目时,我们在想什么?

时间:2023-03-22 15:31:17 科技观察

前几年之所以做前后端分离的项目,是因为node刚刚诞生,业界开始考虑如何真正用js来写后端服务,所以他们尝试借鉴了阿里Midway项目,主要是在密集io场景下使用nodeForwarding。我们的新项目采用前后端分离的方式开发。这主要是基于产品的特性。该产品本身将具有强大的富客户端功能。我们的后端服务面向的客户端包括:iOS、Android、iPad、H5,以及一些游戏场景。所以最好的办法是在后端提供一个通用的restapi用于数据传输,而前端的显示逻辑由不同的客户端自己实现。前后端分离项目主要基于微服务架构开发。既然是微服务,分布式系统应该面对的问题一个都不能少。在JAVA微服务开发场景下,SpringBoot可谓神器。基于SpringBoot,我们开发了一个可以快速开发的脚手架。脚手架本身包含了常用的常用的基础功能,比如auth验证、函数认证、Mysql、Mq、Redis和通用配置等。依赖性,让开发工程师需要开发新的功能时,直接从对应的代码库中pull下来,编译后运行一个helloworldrestapi项目即可。剩下的工作就是围绕业务逻辑编写存储库、服务和控制器代码。通信服务之间的通信主要可以通过HTTP和RPC进行。众所周知RPC调用的效率比HTTP高出好几个档次,所以推荐使用RPC。但考虑到系统性能和可用性、快速开发等因素,我们也大量使用HTTP。服务电话。同时,我们也通过Golang重写了一些核心的API,比如支付和交易接口,所以我们需要在系统效率和开发效率之间取得平衡。接口规范虽然是前后端分离项目,大部分都是通过restapi暴露数据给客户端,但是系统中难免会有自己的viewpage,所以api和controller的命名会建立:AuthApi、AuthController、convention大于配置,可以帮助我们的后端隔离和控制不同的请求。任务系统项目中不可避免地存在大量的任务程序。主要是做好数据备份,考虑分布式场景下的任务调度,以及资源分配问题,主要根据不同场景进行开发。我们使用自研的Zk+定时任务调度系统,也可以使用开源的Elastic-Job方案。依赖排序是项目开发过程中最重要的一点。它梳理了系统上下游所依赖的服务,同时梳理了服务之间的层次关系。依赖关系主要分为两部分:依赖他人和被他人依赖;依赖他人的服务,包括其他系统API和底层数据库、Redis、MQ等服务,需要做好对方服务不可用的准备,随时降级。电流限制和开关功能最好是可配置和自动化的。被他人依赖的服务具有高可用、幂等、响应数据可读性好的特点。同时梳理服务依赖,哪些系统是强依赖,哪些是弱依赖。根据不同依赖的标准,做好切换、降级、重试等功能。对于DB挂等强依赖,可以写日志,写入MQ。弱依赖可以软降级,比如写日志到ES。如果ES不可用,可以直接降级。对于黄金级别的服务,必须保证服务高可用,可以做容灾,比如依赖集群和多机房,也就是这个服务不能降级,需要准备多个解决方案确保服务可用。Hystrix可用于依赖降级。用户友好性做最坏的打算。如所有后端服务不可用、前端转发问题等,不得给用户错误页面。您必须建立一个有数据支持的多级缓存。不管怎样,你必须保证页面上有内容。.总结总结一下,做好工具,梳理服务依赖,分类服务。弱依赖可以通过降级和限流来处理。对于强依赖,必须采用多种容灾方式来保证高可用。不要给用户造成恐慌的页面,一定要有数据做后盾。