本文共 3145 字,大约阅读时间需要 10 分钟。
维护不方便,资源占用高,但是调用方便,可以直接获取对象调用数据共享,比如session,并发低,容易崩溃
集群,集群并不能解决资源占用高的问题,但是提高了可用性和并发量,但是带来了问题:
(1)如何分发请求(负载均衡) (2)状态共享(session共享)负载均衡就是从一堆一样的东西里挑一个
按照项目具体清空进行拆分
(1)按照模块拆分
登录、注册和商品拆分出来
(2)按照访问量拆分
商品的查询拆分出来
订单的查询拆分出来 优惠券拆分为发券和用券系统
(3)按照查询
查询、修改
我们把代码拆分,但是最终还要互相调用。
分布式,节点多,机器多,每个功能对应的机器到底是哪个我们不知道,而且这些机器会随着访问量进行增删
我们不能主动找到服务器在哪,但是服务器可以主动告诉我们它在哪。
注册中心地址是确定的,然后所有的服务器去注册中心进行注册,注册其实就是把自己的信息通过注册中心提供的接口写进去,注册中心会保存。
/dubbo/接口名/providers(consumers,routers路由网关负载均衡)
在dubbo下有很多的接口,都是保存的服务,按照规则,我们可以放入,也可以获取调用服务。一致性。 一堆的api,主要是和dubbo的整合,但是dubbo帮我们做了很多事情server整合:导入server依赖包,写个配置文件来配置地址、帐号和密码,添加一个enableEurekaServer
client整合:导入client依赖包,配置server的地址密码等信息,添加注解enableEurekaClient,enableDiscovercap理论:一致性,可用性,分区容错性,一致和可用是有冲突的,需要权衡。
微服务属于分布式,提供分布式方案的有:
springCloud,采用http调用 dubbo+zookeeper,采用RPC调用,依赖java对象,比较局限导入依赖包,在resttemplate上面加注解loadblanced,然后我们调用服务的时候主机
这是一个客户端侧的负载均衡客户端负载均衡:ribbon先从eureka上面获取到所有服务器,然后从中间选择一个,这就是客户端负载均衡。
服务端负载均衡:客户端连接一个负载均衡服务器ribbon,告诉它我要一个服务,然后服务器在里面会找到所有服务列表,挑选一个返回。整合ribbon的
也是一个规则,地址路径的拼接方式规则,通过类注解参数来声明访问什么服务,通过方法参数来传递请求参数可能出现的问题:
降级机制:当我们的请求出现问题的时候,为了防止出现更多的级联故障(A>B>C>D>E,如果E抛出异常,或者E阻塞,则其他服务都会异常或者阻塞,阻塞会导致前面的机器可能线程池被消耗完毕,正常请求也拿不到线程资源,全部卡死)或者用户体验不好(出现系统错误页面),即出现问题,不能将正常数据返回给调用者,我们需要找替代方式进行处理。
程序的统一入口,可以做我们想做的事情,比如为了解决功能太多,需要的服务器太多导致域名太多,产生的跨域问题以及代码编写的复杂度问题,可以将所有的服务器统一交给网关管理,即只需要和网关通信。
网关可以进行统一的一些数据校验,判断,规则审查,动态路由等等。
参数的判断、校验、签名、token、动态路由、发送日志等等。
http://网关的端口/服务的名字/地址/参数
http://网关的端口/服务的别名/地址/参数
别名需要在配置文件中配置,也就是说每增删服务,必须要修改一次配置文件,是不合理的,违背开闭原则。 我们配置的服务实际上是通过requestcontest中put的两个参数,即receiveID和receiveURL来进行的映射。
因为服务调用是客户端或者是用户执行的,所以我们要想办法通过用户传递来的参数来找到服务的id和url即可
这是典型的key-value,我们可以在redis中将这些关系放好,根据用户传递来的参数随时获取即可,就能随时更新,所以我们只要定义一个规则,即参数和服务之间的映射规则。消息队列,应用之间通信,即服务器和服务器之间的通信,主要是来取代同步操作,很多操作都是异步的
存储的服务器,模糊查询性能很高
分词器,一段内容如何拆分 倒排索引,根据内容找索引,然后根据索引找内容 库和表都可以动态创建微信公众号 ---> 区分文本消息 ---> 规则 ---> 要求用户先输入xxx,然后输入的内容就是查询条件 ---> restTemplate(java中发请求的类) ---> 日志数据 ---> ES ---> 接口(网关对应接口,都是各个模块服务)
在使用微信公众号进行开发的时候,要注意,有一个bug,就是当点击使用【click】关键字开头的时候,会不断报错,说是编码问题,但其实不是编码问题,而是腾讯公司本身的问题,我们不能使用【click】关键字
click1.setType("click");
需要统计在我们的平台的销售记录,怎么统计?
只要发起请求的就是客户端 | ERP发起请求—>网关—>对应的接口参数—>appkey—>数据整合 给用户返回的数据需要经过10个服务获取得到
jwt身份认证组件,和shiro很类似,一般用于注册和登录,保证一处登录后,使用其他相关的服务的时候不需要再登录,但是需要用过滤器进行认证。
网关主要作用是过滤、认证、监控等等,通过网关,才能访问注册中心获取服务,这中间需要redis缓存。
注册中心有Eureka和zookeeper,主要作用是将服务注册进去,然后提供路径或者接口,供用户调用。
MQ和ElasticSearch可以配合使用,一般网关调取服务,执行服务,给用户反馈结果等主线操作不变,在其中会拉去副线,给MQ,进行日志处理,然后给到ElasticSearch,ElasticSearch可以存储日志信息,并会从数据库获取相关的数据进行备份存储,向外提供的是查找功能。
当数据库数据发生更新的时候,会通知给MQ,然后MQ也会传递给ElasticSearch,实现更新。
转载地址:http://vvgzi.baihongyu.com/