单应用架构 -> 应用服务器和数据库服务器分离 -> 应用服务器集群 -> 数据库压力变大,数据库读写分离 ->
引入缓存机制缓解数据库的压力 -> 数据库的水平/垂直拆分(数据库分库分表) -> 应用的拆分(微服务)
从系统架构上可以大体分为两种:单体应用, 分布式应用
1)单体应用
缺陷:

优点:
2)分布式应用

缺点:
优点:
常用的微服务分布式框架:
1)dubbo: 阿里开源的微服务框架,
2)springcloud: 基于spring,springboot的开源微服务框架
2018 年 10 月 31 日的凌晨,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 Maven 中央库发布了第一个版本。Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。
此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统
** 主要功能包括:**
注意组件
springcloud基于springboot,两者之间的版本是有相关性的,不同的springcloud版本需要相对应的springboot版本支持。

开发环境说明:
或分享连接已打包
从官网上下载nacos,解压到一个目录即可,在运行前请确定正确安装了jdk1.8或以上版本,正确配置了JAVA_HOME。
来到安装目录运行startup.cmd即可启动.
注意:
nacos默认是在集群模式下运行的 所有我们需要修改 startup.cmd配置文件

创建一个maven工程,该工程为父工程,不需要src目录,可以将其删除。编写pom.xml文件导入必要的依赖。


- <properties>
- <spring-boot.version>2.3.2.RELEASEspring-boot.version>
- <spring-cloud.version>Hoxton.SR8spring-cloud.version>
- <spring-cloud-ali.version>2.2.3.RELEASEspring-cloud-ali.version>
- <spring-cloud-ali-nacos.version>1.3.3spring-cloud-ali-nacos.version>
- <spring-cloud-openfeign.version>2.2.2.RELEASEspring-cloud-openfeign.version>
- <maven.compiler.source>1.8maven.compiler.source>
- <maven.compiler.target>1.8maven.compiler.target>
- <hibernate.version>5.1.0.Finalhibernate.version>
- properties>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-dependenciesartifactId>
- <version>${spring-boot.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-dependenciesartifactId>
- <version>${spring-cloud.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
-
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-alibaba-dependenciesartifactId>
- <version>${spring-cloud-ali.version}version>
- <type>pomtype>
- <scope>importscope>
- dependency>
-
- <dependency>
- <groupId>org.hibernategroupId>
- <artifactId>hibernate-validatorartifactId>
- <version>${hibernate.version}version>
- dependency>
-
- <dependency>
- <groupId>org.springframework.cloudgroupId>
- <artifactId>spring-cloud-starter-openfeignartifactId>
- <version>${spring-cloud-openfeign.version}version>
- dependency>
- dependencies>
- dependencyManagement>
3.3.2 创建服务提供者模块
模块直接创建默认的maven项目即可

1)加入必要的依赖包: 夫模块中已经把版本定义好了 所有导入依赖不要定义版本
- <dependencies>
-
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
-
-
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
- dependency>
-
-
- <dependency>
- <groupId>com.alibaba.nacosgroupId>
- <artifactId>nacos-clientartifactId>
- dependency>
-
-
- <dependency>
- <groupId>org.hibernategroupId>
- <artifactId>hibernate-validatorartifactId>
- dependency>
-
- dependencies>
2)创建完成模块后,创建模块的目录结构, 如下图:

- server:
- port: 8070
- spring:
- application:
- name: service-proved
- cloud:
- nacos:
- server-addr: 127.0.0.1:8848
编写启动类
- @SpringBootApplication
- @EnableDiscoveryClient
- public class ProviedApp {
-
-
- public static void main(String[] args) {
- SpringApplication.run(ProviedApp.class,args);
- }
-
-
- }
4)启动服务,查看注册中心
nacos控制台 http://localhost:8848/nacos/
默认用户名:nacos,密码:nacos

5)创建一个服务
创建一个简单的服务提供者,向外提供restful服务,用于演示服务间的调用。

- @RestController
- public class TestController {
-
- @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
- public String echo(@PathVariable String string) {
- System.out.println("服务提供者.........");
- return "Hello Nacos Discovery " + string;
- }
- }
3.3.2 服务消费者
创建服务消费者模块,具体操作和服务提供者相同。
1)导入依赖包:
- <dependencies>
-
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
- dependency>
-
-
- <dependency>
- <groupId>com.alibaba.cloudgroupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
- dependency>
-
-
- <dependency>
- <groupId>com.alibaba.nacosgroupId>
- <artifactId>nacos-clientartifactId>
- dependency>
-
-
- <dependency>
- <groupId>org.hibernategroupId>
- <artifactId>hibernate-validatorartifactId>
- dependency>
-
- dependencies>
2)创建模块结构及配置文件

在配置文件中配置了服务端口号,服务吗,及nacos服务IP及端口号。
3)创建启动类

- @SpringBootApplication
- @EnableDiscoveryClient
- public class ConsumerApp {
- public static void main(String[] args) {
- SpringApplication.run(ConsumerApp.class,args);
- }
- }
启动服务,查询nacos控制台:

4)开发一个服务,调用服务提供者提供的服务

RestConfig 类
- @Configuration
- public class RestConfig {
- //负载均衡
- @LoadBalanced
- @Bean
- public RestTemplate restTemplate() {
- return new RestTemplate();
- }
-
-
- }
TestController 类
- @RestController
- public class TestController {
- @Autowired
- private RestTemplate restTemplate;
-
- @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
- public String echo(@PathVariable String str) {
- System.out.println("服务消费者 .......... ");
- //调用provied模块中的请求
- return restTemplate.getForObject("http://service-proved/echo/" + str, String.class);
- }
-
- }
3.4 测试
1)启动nacos,服务提供者,服务消费者
2)调用服务消费者他的echo服务,http://localhost:8080/echo/hello word,输出如下信息说明服务正常。
