小程序商城Mall,打造最佳SpringCloudAlibaba最佳实践

背景

因为一路一来看过不少的技术体系,也见证一些技术体系中止维护,想用本身以为比较好的一套技术体系来作一个分布式微服务系统,包括开发层面,中间件层面和运维层面的技术,做为本身但愿的一个技术团队里的技术栈。
这年SpringCloud开始把之前的技术给中止维护了,如eureka、feign、zuul,还有当当网的那个elastic-job,当当网都要挂了。因此出于这些缘由,想换一套好使的技术栈。前端

并且我看了其余的商城的项目,要么就是不使用微服务的,要么就是只写了后端或者前端的,或者是知识纯粹用技术把功能给写出来,搬砖实现玩功能,作完而已,因此仍是想本身按照真实一点的样子来开发,试着解决和作如何可靠和稳定分布式服务方案。vue

本文目的

  1. 给你们介绍一下总体的设计和某些设计时,所用那款技术栈的缘由。
  2. 介绍开发小程序所用工具,着手前端开发
  3. 之后逐一介绍每一个技术场景的要点、技术难点
  4. 一些东西只是在开发中,也还没完成。
  5. 本文也是为了本身写一下本身喜欢的技术,留个底。

欢迎关注公众号,文章更快一步

个人公众号 :地藏思惟java

image

技术架构

此次主要转站SpringCloudAlibabagit

image

服务治理:

springCloud Dubbo,由于SpringCloud原来那套都中止维护了。
虽然此次用回dubbo了,可是有些人说问是否后悔从dubbo转springCloud,不会后悔呀,由于那时候dubbo只有服务调度治理功能,没啥周边配套的。
服务降级也是由于Hystrix不用了,因此用Sentinelspring

服务网关:

之前呆过的公司,是由一个java服务做为app的服务端,再聚合下游多个服务再提供给接口包一层返回给app的,还有那些鉴权功能,此次使用SpringCloud gateway转发和鉴权。鉴权部分换了方式,这个点比较关键,放到后面业务系统设计来讲。小程序

消息队列:

使用RocketMq,而不用rabbitMq(慢),也不用Kafka(没有tag分标签的功能,一个队列多个消费者会消费相同的东西)后端

分布式事务:

就是跨系统的事务,之前都是使用最终一致性,异步处理的方式,此次看有没有场景使用到分布式同步的事务,以前了解的是用LCN国人开发的框架,此次想用阿里的Seata。(目前开发中的尚未使用上)微信

规则引擎:

图上没写,这里说一下是使用drools,就是用于营销服务的,是作那个店铺里的各个优惠的规则,如:满100减去10,满3件减10块,满多少送1个物品的这些规则。其实均可以用规则引擎来作,之前呆过的网贷公司,那时是用于对接n第三方时不一样规则。架构

定时任务调度:

SchedulerX,而不用elastic-job,由于当当要挂了。惟品会用elastic-job封装了一下搞两个叫saturn,而虎牙又把saturn封装,此次调研一下SchedulerX,看看哪一个好使。mvc

自研自动生成RestFul接口:

这个是我本身作的一个框架,concise-mvc,简约mvc生成器,由于微服务如今都是用dubbo调用了,没有http协议的接口给springCloudgateway或者上层应用使用。因此搞了个根据某个特制的注解下的interface,都生成:/ #{interface名字}/#{方法名字}的uri。这样开发者就能够只开发dubbo接口,自动生成好http接口让gateway来调用。

前端:

前端目前只作小程序端,不作pc端,此次前端也是我本身写,使用uniapp,这个框架呢是能够用一份代码,实现微信、抖音、百度等小程序的编译,他编译会自动转换为他们须要的接口。为何不用他来实现pc端的前端代码,是由于pc比较大,样式布局就不同了。

后台管理系统

是使用vueadmin的框架,也是跟uniapp那样给你作好了导航栏那些,跳转那些。在里面写实现就行了。

运维设施方面技术栈是我在贷款公司里以为比较好使的一些组件,后面去的公司也不少都用那些,其中最好的是之前贷款公司基于k8s开发的系统,由于其余的公司搞的k8s部署就只能一个test环境和prod环境。

其实那框里面不少都是本项目中我不会去作的,由于没有时间作太多,可能会找别人帮忙部署。

微服务划分

UDB系统

我看不少个系统里都有个叫security的服务,可是他们只是作鉴权功能。而这里为何叫udb,是由于我在一个互联网公司的时候这个系统不仅是仅仅的鉴权,而是作了统一账号的功能,就是让微信、手机登录、QQ的受权登陆,都统一一个地方,让相同的人的微信号、qq号都绑定为一个号码。而且生成出一个id,做为userId,让业务其余系统都经过此id统一来交互。

微信受权其实也是oauth2的。

这样统一个鉴权的地方,生成的token就能够包含userId,这个使得开发springCloudgateway,可使用GatewayFilter统一拦截数据的接口,filter里先作鉴权,让udb系统返回userid,而后把userid,塞到Http的body里面,让gateway下游系统使用这个userId,这样就能保证用户本身才能修改本身的数据,不会修改了别人id的数据,除非你把token都给别人了。

经过这样的结合Udb系统和springCloudgateway,就能够统一userId交互,统一鉴权,别各个项目,如一时电商一时点餐,当相同的人的时候就一个userId不一样appId区分就行了,否则一我的来相同的企业有不一样的身份证号,你看工商银行app和e融app里面也是相同的天然人号,不一样的业务id。

营销服务

这里包括优惠券,促销活动,商家活动的优惠方式,其中上文说到的店铺优惠,一时满100减去10,一时满3件减10块,若是你用传统方式,都存到表里叫商店优惠规则,一个商店就有多个规则,那你优惠条件有不少种,每种又有不一样结果,在代码里if else很麻烦的,因此先建议使用drools,后再讲怎么用。

其余的服务我以为很常规,就看扣钱扣商品的时候是最终一致性仍是要作分布式事务那些不详细讲了。

已开发完成样例

结语

总有一天你们也会独立完成本身喜欢的系统,搭建本身的玩具。


欢迎关注公众号,文章更快一步

个人公众号 :地藏思惟

image

掘金:地藏Kelvin

简书:地藏Kelvin

个人Gitee: 地藏Kelvin https://gitee.com/kelvin-cai

本文由博客一文多发平台 OpenWrite 发布!
相关文章
相关标签/搜索