几年前作先后端分离项目的缘由,是node刚刚横空出世,业界开始考虑如何真正的用js去写后端服务
,因而就借鉴阿里中途岛
项目去尝试,主要仍是用到了node的密集io场景下的转发。前端
咱们的新项目是采用先后端分离的方式进行开发,这一点主要是基于产品特色考虑而来,产品自己会有很强的富客户端
的特色。node
咱们后端服务面向的客户端包含:iOS
,Android
,iPad
,H5
,还有一些游戏场景
。因此最好的方式就是后端提供通用的restapi
进行数据传输,而前端展现逻辑则交由不一样客户端本身实现。sql
先后端分离项目主要基于微服务架构
开发,既然是微服务
,因此分布式系统
所应该面对的问题一个也漏不掉。数据库
JAVA微服务开发场景下,SpringBoot
可谓神器,咱们基于SpringBoot
开发了一个能够快速开发的脚手架,脚手架自己包含了经常使用及通用的基本功能,如auth验证
,功能鉴权
,Mysql
,Mq
,Redis
及通用配置
的依赖,这样开发工程师在须要开发新功能时,直接从对应的代码库拉下来,编译以后即可跑起来一个hello world
的restapi
项目。剩下的工做就是围绕业务逻辑去写repository,service,controller
代码了。后端
服务之间的通讯主要能够经过HTTP,RPC
方式,众所周知RPC
调用的效率要高HTTP
好几个等级,因此推荐使用RPC
,可是综合考虑系统性能及可用性,快速开发等因素,咱们也大量使用HTTP
进行服务调用,同时咱们也经过Golang
对一些核心api
,好比支付,交易类
接口进行了重写,因此须要在系统效率及开发效率之间作好平衡。api
虽然是先后端分离项目,大部分是经过restapi
方式给客户端暴露数据,可是也不可避免在系统中会存在本身的view
页面,因此在api及controller
命名上会创建:AuthApi,AuthController
,约定大于配置,能够帮助咱们后端对不一样的请求作隔离和控制。缓存
项目中不可避免存在大量的任务程序,主要须要作好数据备份,考虑分布式场景下的任务调度,资源分配问题,主要根据场景不一样进行开发。
咱们采用Zk+定时任务
自研的调度系统,也能够采用开源的Elastic-Job
方案。架构
这个是一个项目开发过程当中最重要的一点,梳理好系统上下游所依赖的服务,同时梳理好服务之间的等级关系。前后端分离
依赖关系主要分为两部分:依赖别人,被别人依赖
;分布式
依赖别人的服务,包含其余系统API及底层的数据库,Redis,MQ等服务,须要作好对方服务不可用的准备,随时作好降级,限流及开关
功能,最好作成可配置,自动化。
被别人依赖的服务作成高可用,幂等性,响应数据的可读性好
等特色。
同时对服务依赖性梳理,哪些系统属于强依赖,哪些属于若依赖。
不一样依赖的标准作好开关,降级,重试等功能,强依赖好比DB挂了,能够写日志,写到MQ。弱依赖能够作成柔性降级,好比写日志到ES中,ES不可用,能够直接降级便可。
对于黄金等级服务
,则必定保证服务高可用,能够作灾备,好比依赖集群,多个机房
,也就是这个服务是不可降级的,必须准备多套方案保证服务可用。
关于依赖降级可使用Hystrix
作。
作好最坏的打算,若是后端服务所有不可用,前端转发问题等,必定不要给用户一个错误页面,必定创建多级缓存,有数据托底
,不管如何保证页面上有内容的。
综上所述,作好工具,梳理好服务依赖,对服务作等级划分,弱依赖能够经过降级,限流方式处理。强依赖则必须经过多种灾备手段保证高可用,不要给用户感到恐慌
的页面,要有数据托底。