前言
这篇文章主要是简单介绍一下,我刚进公司见到的电商V1.0架构。
部署架构图
电商架构剖析
简介
整个电商架构是基于微服务架构体系搭建,核心组件主要包括SpringCloud Gateway、Consul、Java Application、PHP Application、 Mysql五大部分组成。前端接口业务和后台管理业务独立部署的两套架构,整体部署架构无太大差异,差异主要在前端接口业务入口使用腾讯云SLB进行负载均衡,请求分发;而后台服务独立部署了nginx来进行请求反向代理。
微服务组件
负载均衡
直接使用腾讯云提供的负载均衡SLB集群服务。
网关
服务网关采用了SpringCloud新推出的Gateway组件,Gateway组件是2018年2月发布的,基于SpringBoot 2.0,Spring 5.0,支持非阻塞、异步编程模式。性能上比Netflix ZUUL更优秀(因为ZUUL采用同步阻塞编程模型)。
基于Gateway提供的filter链功能,定制开发了jwt token的接口鉴权、url访问级别控制(如:/pub前缀直接放行、/user需要判断token合法性等)。
为什么会选择Gateway?
究其原因,还是觉得是基于SpringCloud的(易上手),然后采用了非阻塞、异步模型(性能有保障)。But... ,在真实的使用过程中,你会发现一个新出来的东西,未经过长时间实践检验的情况下,会让你踩多少坑。
服务注册/发现
服务注册/发现采用Golang实现的Consul框架,Consul提供了很多特性,例如HTTP API、KV存储、支持多语言、支持多数据中心等。
SpringCloud提供Consul Client的SDK,直接集成到项目后,项目启动过程中就能自动完成服务注册,服务发现同样使用起来非常方便,通过feign就能完成服务调用。
Consul提供两种服务注册的方式,通过HTTP API或者通过JSON配置文件。Java应用通过SDK封装了HTTP API的方式来完成服务注册,Php应用则是通过配置JSON文件的方式完成服务注册的。
Consul服务注册有两种方式:HTTP API & JSON配置文件
方式一:HTTP API
http://{ip}:8500/v1/agent/service/register/:service
方式二:JSON 配置文件
{
"services": [
{
"id": "serverId",
"name": "serverName",
"tags": [
"primary"
],
"address": "127.0.0.1",
"port": 9003,
"checks": [
{
"id": "api-servie",
"name": "Service 'xx' check",
"http": "http://127.0.0.1:9003/public/health",
"method": "GET",
"interval": "10s",
"timeout": "1s"
}
]
}
]}
启动Consul增加启动参数-config-dir
nohup ./consul agent -dev -config-dir=/consul-conf/service.json &
为什么会选择Consul?
性能高,微服务大了,能顶住访问量; 保证数据强一致性,不会出现数据不一致情况下服务调用到不可用的节点。还提供KV存储,还能当个简单的配置中心使用。
总结
对业务刚起步,同时又想实践微服务架构的初创公司来说,这套V1.0架构没啥毛病,玩得好好的,但是当用户访问量突然暴增的上来,这套架构就会遇到坑了,这时候技术架构就需要作出了相应的调整了。
有疑问加站长微信联系(非本文作者)