10_01_概述与搭建服务中心

拉勾教育PC站-微服务版

— 老孙

1、回顾微服务

1. 概述

我们先看微服务的提出者马丁福勒的论文中,是如何描述微服务的

微服务是一种架构模式或者架构风格,它提倡将单一的应用程序划分成一组小的服务,每个服务运行在其独立的进程中-,服务之间相互协调,配置,共同为用户提供最终的价值;

通俗点:

封建王朝,很有多州郡,每个州郡都是皇上的亲戚,也有贡献突出的将军,镇南侯,平西王等等封疆大吏,他们每个人在自己的管辖区域,就是最高权力的象征。

自己的州郡都独立运营(单一架构

但是风土人情不同,统治的策略也要满足不同的需求。(南方有文化底蕴,孔夫子教化即可。西北民风彪悍,肯定要用雷霆手段)

这样大大小小的不同州郡,统一起来,就是一个至高权力的朝廷(总架构

总结:

将传统的一站式应用,拆分成一个一个独立的服务,彻底的解除耦合,每个服务提供单个业务功能的服务,一个服务就做一件事,成立一个独立的进程,能够自行启动和销毁,甚至拥有独立的数据库。

2. 优点

  1. 每个服务内聚,足够小,开发简单,效率高,一个服务做一件事;

  2. 微服务是松耦合的,无论是开发还是部署阶段都是独立;

  3. 微服务能使用不同的语言开发;

4) 微服务只是业务逻辑代码,不会和HTML,CSS或其他页面组件混合;

  1. 每个服务都有自己的储存能力,可以有自己的数据库,当然,也可以有统一的数据;

3. 缺点

  1. 开发人员要处理分布式系统的复杂性;

  2. 随着服务的增加,运维的难度越大;

  3. 系统部署依赖

  4. 通信成本加大

  5. 数据一致性难搞

  6. 系统集成测试麻烦

  7. 性能监控不易

  8. 。。。。

4. 微服务与微服务架构

4.1 微服务

  • 强调的是一个服务的大小, 关注的是一个点 ,能够解决某个问题而存在的应用,类似于项目中的某个工程/module;

  • 单独的牙科医院,眼科医院;

  • 手机,电脑,沙发,床垫,运动服,每一个都是微服务;

  • 专注个体,每个个体完成一个具体的任务或功能;

4.2 微服务架构

在这里插入图片描述

  • 一种架构模式,它提倡单一应用程序划分一组小的服务,服务之间相互协调,相互配合,为用户提供最终的价值;

  • 服务之间采用轻量级通信机制,(HTTP协议的RESTfull)

  • 每个服务都围绕具体的业务进行构建,并且能够独立部署到生产环境中;

  • 尽量避免统一的,集中式的服务管理机制

  • 单独的门诊就不要了,我们所有的门诊整合,形成了一个综合性医院

  • 小米生态链,牙刷,电饭锅,手机,路由器,全是小米的。

4.3 SpringCloud和SpringBoot区别?

  • SpringBoot专注于快速方便的开发单个个体服务;
  • SpringCloud关注全局微服务的协调和整理,它将SpringBoot开发的一个个单体微服务整合起来;
  • SpringBoot可以独立使用开发,但是SpringCloud离不开SpringBoot,属于依赖关系;
  • SpringBoot属于一个科室,SpringCloud是综合医院;

4.4 SpringCloud对比Dubbo

**Dubbo ****SpringCloud **
服务注册中心ZookeeperString Cloud Netflix Eureka
服务调用方式RPCREST API
服务监控Dubbo-monitorSpring Boot Admin
断路器不完善Spring Cloud Netflix Hystrix
服务网关Spring Cloud Netflix Zuul
分布式配置Spring Cloud Config
服务跟踪Spring Cloud Sleuth
消息总线Spring Cloud Bus
数据流Spring Cloud Stream
批量任务Spring Cloud Task

品牌机和组装机

2、微服务架构项目

在这里插入图片描述

  • edu-lagou:父工程
  • edu-api:通用的公共子模块
  • edu-eureka-boot:服务中心:7001
  • edu-ad-boot:广告微服务:8001

  • edu-user-boot:用户微服务:8002
  • edu-authority-boot:认证微服务:80

  • edu-course-boot:课程微服务:8004
  • edu-comment-boot:留言微服务:8005

  • edu-pay-boot:支付微服务:8006
  • edu-order-boot:订单微服务:8007

  • edu-config-boot:配置中心:8008

  • edu-gateway-boot:网关微服务:9001

3、搭建项目

3.1 父工程

在这里插入图片描述

在这里插入图片描述

  • 父工程为聚合项目,打包方式为pom
  • src目录也没有意义,可以删除
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <groupId>com.lagou</groupId>
    <artifactId>edu-lagou</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>2020.0.0</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

3.2 创建服务中心

  • 在父工程中创建一个新的Module

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.lagou</groupId>
        <artifactId>edu-lagou</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <groupId>com.lagou</groupId>
    <artifactId>edu-eureka-boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>edu-eureka-boot</name>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • 开启服务管理器,调试会方便一些

在这里插入图片描述

@SpringBootApplication
@EnableEurekaServer //开启Eureka服务
public class EduEurekaBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(EduEurekaBootApplication.class, args);
    }
}
  • 修改配置文件后缀为 yml

在这里插入图片描述

server:
  # 配置服务端口
  port: 7001
eureka:
  instance:
    hostname: localhost
  client:
    service-url:
      # 配置eureka服务器地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    #是否需要将自己注册到注册中心(注册中心集群需要设置为true)
    register-with-eureka: false
    #是否需要搜索服务信息 因为自己是注册中心所以为false
    fetch-registry: false
  • 启动项目

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值