缺点:
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务
缺点:
微服务的特点:
node、WebPack、npm之间的联系与区别
node是js后端运行平台,可以把它看成java体系中对应的jdk。
npm是nodejs的包管理工具,可以把它看成maven中包依赖管理那部分。
webpack是前端工程化打包工具,可以把它看成maven中工程自动化构建那部分。
利用Node.js及Vue.js技术栈,实现前后端分离开发
利用SpringCloud技术栈,实现真正的微服务实战开发,并且是基于SpringBoot2.0和SpringCloud最新版本Finchley.RC1实现。
贴近真实的电商数据库设计,解决全品类电商的SPU和SKU管理问题
基于FastDFS解决大数据量的分布式文件存储问题
基于Elasticsearch高级聚合功能,实现商品的智能过滤搜索
基于Elasticsearch高级聚合功能,实现销售业务的复杂统计及报表输出
基于LocalStorage实现离线客户端购物车,减轻服务端压力。
基于JWT技术及RSA非对称加密实现真正无状态的单点登录。
结合JWT和RSA非对称加密,自定义Feign过滤器实现自动化服务间鉴权,解决服务对外暴露的安全问题
基于阿里大于实现SMS功能,解决电商短信通知问题
基于RabbitMQ实现可靠消息服务,解决服务间通信问题
基于RabbitMQ实现可靠消息服务,解决分布式事务问题
使用微信SDK实现微信扫码支付,符合主流付款方式
基于Redis搭建高可用集群,实现可靠缓存服务即热点数据保存。
基于Redis和MQ来应对高可用高并发的秒杀场景
基于MyCat实现数据库的读写分离和分库分表
基于Thymeleaf实现页面模板和静态化,提高页面响应速度和并发能力
基于Nginx实现初步的请求负载均衡和请求限流
SpringBoot、SpringCloud、maven都是做什么的?
SpringBoot
程序搭建的脚手架:SpringBoot
其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,并且解决混乱的依赖管理。
依赖
SpringBoot提供了一个名为spring-boot-starter-parent的工程,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可。
配置
为了让SpringBoot帮我们完成各种自动配置,我们必须引入SpringBoot提供的自动配置依赖,我们称为启动器。SpringBoot内部对大量的第三方库或Spring内部库进行了默认配置,这些配置是否生效,取决于我们是否引入了对应库所需的依赖,如果有那么默认配置就会生效。
其中依赖:spring-boot-autoconfigure
定义了大量的自动配置类,几乎涵盖了现在的主流开源框架。
SpringCloud
微服务的实现方式:SpringCloud
它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能。其主要涉及的组件包括:
netflix
maven
可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。Maven的核心功能便是合理叙述项目间的依赖关系。
maven项目可以这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通过pom.xml添加jar包)
一篇很不错的博客,maven,讲得不错。
Eureka
架构图:
负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。
同时,服务提供方与Eureka之间通过“心跳”机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。这就实现了服务的自动注册、发现、状态监控。
当前在eureka中注册的微服务列表:
例如商品微服务ly-register
,该名称在application.yml
中配置
server:
port: 10086 #端口号
spring:
application:
name: ly-registry #spring.application.name,这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name,这个名称也是在eureka中显示的名称
eureka:
client:
service-url:# EurekaServer的地址,现在是自己的地址,如果是集群,需要加上其它Server的地址
defaultZone: http://127.0.0.1:10086/eureka
最终:
Eureka
实现了服务注册中心以及服务注册与发现;Ribbon
或Feign
实现服务的消费以及均衡负载;Spring Cloud Config
实现了应用多环境的外部化配置以及版本管理。Hystrix
的融断机制来避免在微服务架构中个别服务出现异常时引起的故障蔓延。避免对外服务地址的暴露,引入网关——Zuul
不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都会经过Zuul这个网关,然后再由网关来实现 鉴权、动态路由等等操作。Zuul
就是我们服务的统一入口。
zuul:
prefix: /api # 添加路由前缀
routes:
item-service: /item/**
search-service: /search/**
user-service: /user/**
auth-service: /auth/**
cart-service: /cart/**
order-service: /order/**
ignored-services:
- upload-service # 忽略upload-service服务
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMillisecond: 5000 # 熔断超时时长:10000ms
ribbon:
ConnectTimeout: 1000 # 连接超时时间(ms)
ReadTimeout: 3500 # 通信超时时间(ms)
MaxAutoRetriesNextServer: 0 # 同一服务不同实例的重试次数
MaxAutoRetries: 0 # 同一实例的重试次数
我们会在ly-item中创建两个子工程:
以及实现如下功能:
FastDFS 分布式文件系统(轻量级、高性能、纯C开发)
分布式文件系统管理的文件存储在很多机器,这些机器通过网络连接,要被统一管理。无论是上传或者访问文件,都需要通过管理中心来访问
FastDFS两个主要的角色:Tracker Server
和 Storage Server
。
Elasticsearch 全文检索技术
近实时搜索,数据更新在Elasticsearch中几乎是完全同步的。
出现手机的搜索结果页面:
Thymeleaf 渲染页面
Thymeleaf 实现静态化
页面是通过Thymeleaf模板引擎渲染后返回到客户端。在后台需要大量的数据查询,而后渲染得到HTML页面。会对数据库造成压力,并且请求的响应时间过长,并发能力不高。
因此,我们需要页面静态化,静态化是指把动态生成的HTML页面变为静态内容保存,以后用户的请求到来,直接访问静态页面,不再经过服务的渲染。静态的HTML页面可以部署在nginx中,从而大大提高并发能力,减小tomcat压力。
注册页面上有短信发送的按钮,当用户点击发送短信,我们需要生成验证码,发送给用户。我们将使用阿里提供的阿里大于
来实现短信发送。
JWT,全称是Json Web Token, 是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权
结合RSA,利用RSA生成公钥和私钥。
JWT包含三部分数据:
流程图:
这幅图主要描述了两个功能:新增商品到购物车、查询购物车。
新增商品:
无论哪种新增,完成后都需要查询购物车列表:
微信支付
点击提交订单跳转到订单支付页面,并生成支付二维码:
支付成功后返回支付状态:
支付详情:
leyou
leyou-portal
leyou-manage-web