springCloud(慕课廖师兄课程笔记)

2-1 微服务和其他常见架构

 1.https://martinfowler.com/articles/micrservices.html

 2.微服务是一种架构风格,由一系列微小的服务共同组成,跑在自己的进程里,每个服务为独立的业务开发,独立部署,有分布式 的管理

 3.单体架构的缺点:开发效率低,代码维护难,部署不灵活,稳定性不高,扩展性不够

 4.分布式的定义:旨在支持应用程序和服务的开发,可以利用物理架构由多个自治的处理元素(多节点),不共享内存,但通过网络发送消息合作。

2-2 从一个极简的微服务架构开始

 1.微服务架构的基础框架、组件

      服务注册中心:微服务内部之间相互调用

      服务网关(Service Gateway):外部访问,将服务暴露出去,对外屏蔽后台服务的细节,路由,可以做限流和容错功能,安全(服务认证,授权,反爬虫)

      后端通用服务(也称中间层服务Middle Tier Service):启动时将信息注册到服务表

      前端服务(也称边缘服务Edge Service):聚合,裁剪

 2.Spring Cloud是一个开发工具集,包含多个子项目

    -----利用Spring Boot的开发便利

     -----主要是基于对Netflix开源组件的进一步封装

  3.Spring Cloud简化了分布式开发

3-1 Spring Cloud Eureka

 1.基于Netflix Eureka做了二次封装

 2.Eureka Server:注册中心

    Eureka Client:服务注册

3-2 Eureka Server

   1.file---->new---->project----->Spring Initializr----->Default:https://start.spring.io

      Dependencies:Cloud Discovery:Eureka Server

2.启动入口类

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

3.关于版本

   http://spring.io

   projects----》SpringCloud(往下翻)

4.启动后一直报错

com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
    at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9.3.jar:1.9.3]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.3.jar:1.9.3]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.9.3.jar:1.9.3]
    at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.3.jar:1.9.3]
    at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.3.jar:1.9.3]
    at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829) ~[eureka-client-1.9.3.jar:1.9.3]
    at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121) ~[eureka-client-1.9.3.jar:1.9.3]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_73]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_73]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_73]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_73]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_73]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_73]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_73]

   需要在application.yml中注册客户端

 

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8111/eureka

5.改变application的注册名

  

spring:
  application:
    name: eureka

3-3 Eureka Client

 1.新建项目(同上) Dependencies:Cloud Discovery:Eureka Discovery

 2.入口类

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

3.配置

server:
  port: 8888
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
spring:
  application:
    name: eureka-client

注:server port 要修改,否则启动是可能会报错,

       

Invocation of destroy method failed on bean with name 'scopedTarget.eurekaClient': org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'eurekaInstanceConfigBean': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)

3-4 eureka的高可用

1.有俩台eurekaService,可让他们互相注册

  eurekaService1的配置

 

server:
  port: 8761
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8762/eureka
    register-with-eureka: false
  #是否展示下线的客户端,自我保护模式(只能在生产环境关闭)
  server:
    enable-self-preservation: false
spring:
  application:
    name: eureka

eurekaService2的配置

server:
  port: 8762
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
    register-with-eureka: false
spring:
  application:
    name: eureka

eurekaClient的配置

server:
  port: 8777
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8762/eureka
    instance:
      hostname: clientName
spring:
  application:
    name: eureka-client

这样,client的注册信息不仅能在eureka2中看见,也能在eureka1中看见,但当eureka2宕机时,client是无法注册的,所以可将lient端如下配置

server:
  port: 8777
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8762/eureka,http://localhost:8761/eureka
    instance:
      hostname: clientName
spring:
  application:
    name: eureka-client

3-6 分布式下服务注册的地位和原理

1.注册中心相当于中间商。

2.服务发现的俩种方式:a从注册中心拿到一堆b的信息,然后通过某种机制(轮循,hash)也就是负载均衡机制,来找出一个b的ip地址,称为客户端发现;a通过代理拿到一个b的ip地址,称为服务端发现。

3.eureka是客户端发现,nginx,zookeeper,kubernetes是服务端发现

4.微服务的特点:异构(不同语言,不同类型的数据库)

4-1 微服务的服务拆分

1.微服务的起点和终点

    单一应用架构----》垂直应用架构----》分布式服务架构----》流动计算架构

    ORM                       MVC                     RPC                           SOA

    2.业务上不适合上微服务的:系统中包含强事务场景的,传统应用使用本地事务和分布式事务保证数据一致性,但是在微服务架构中数据都是服务私有的,需要通过服务提供的API来访问,所以分布式事务不再适用微服务架构;业务相对稳定,迭代周期长;访问压力不大,可用性要求不高;

4-2 康威定律和微服务

1.任何组织在设计一套系统时,所交付的设计方案在结构上都与该组织的沟通结构保持一致。

4-3 点餐业务服务拆分分析

1.第一种:分为手机端和pc端

2.第二种:订单,商品,支付

3.服务拆分的方法论

   扩展立方模型:x轴水平复制(通过副本扩展,实现应用程序的伸缩性和可用性)

                            z轴数据分区(每个服务器负责一个数据子集)

                            y轴功能解耦

4.拆功能:单一职责,松耦合(服务之间耦合度低,修改一个服务,不用导致另一个服务被修改),高内聚(相关的行为都聚集在一个服务器内部);关注点分离(按职责,通用性,粒度级别);

5.服务和数据的关系:先考虑业务功能,再考虑数据;

 

 

你可能感兴趣的:(springCloud)