微服务化入门

 

微服务入门java

 

单体应用web

“单体架构(monolith application)”就是将应用程序的全部功能都打包成一个独立的单元进行部署,能够是JARWAREAR或其它归档格式。spring

优势:设计模式

1.单个系统包含全部功能tomcat

2.部署简单springboot

3.易于测试网络

缺点:架构

1.代码臃肿、模块耦合度高、逻辑复杂、修改难度大mvc

2.编译、启动周期长app

3.系统错误隔离性差、可用性差,任何一个模块的错误都可能形成整个系统的宕机

4.伸缩性差,系统的扩容只能只对这个应用进行扩容,不能作到对某个功能点进行扩容

5.线上问题修复周期长;任何一个线上问题修复须要对整个应用系统进行全面升级,版本迭代效率低

 

 

微服务

服务:一种架构设计模式。业务逻辑被拆分红一系列小而松散耦合的分布式组件每一个组件都被称为微服务,多个组件共同构成了较大的应用。

优势:

1.每一个服务足够内聚,足够小,代码容易理解、开发效率提升

2.服务之间能够独立部署,微服务架构让持续部署成为可能

3.提升容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪

4.系统不会被长期限制在某个技术栈

 

缺点:

1.运维难度增长,问题追踪定位难度增长

2.团队依赖强,一个服务的版本延迟会拖慢整个应用的开发周期

3.开发难度、复杂度增长;垮服务的调用一般是不一样的机器,甚至是不一样的机房,开发人员须要处理超时、网络异常等问题

4.部署、测试难度增长

5.数据一致性问题

 

微服务

  

 

微服务架构

Dubbo:阿里服务化治理的核心框架。国内使用较多,表明性:

--新浪:Motan-dubbo裁剪版

--当当:DubboX-dubbo加强版

 

Dubbo 只是实现了服务治理,提供各类 Filter,能够经过扩展 Filter 来完善,如:

分布式配置:可使用淘宝的 diamond、百度的 disconf 来实现分布式配置管理。

服务跟踪:可使用京东开源的 Hydra,或者扩展 Filter Zippin 来作服务跟踪。

批量任务:可使用当当开源的 Elastic-Jobtbschedule

 

Spring Cloud:一系列框架的有序集合

--整合Netflix 组件

 

Spring Cloud基于Spring Boot实现了众多分布式系统基础设施,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,服务治理只是其中的一个方面。

 

Spring Cloud组件

Spring Cloud Netflix Eureka:服务注册与发现

Spring Cloud Netflix Zuul:服务网关

Spring Cloud Netflix Hystrix:断路器

Spring Cloud Ribbon:客户端负载均衡

Spring Cloud Feign:声明式服务调用

Spring Cloud Config:分布式配置

Spring Cloud Sleuth服务跟踪

Spring Cloud Bus:消息总线

组件参考:https://springcloud.cc/

 

 

简单微服务

准备工做:

技能要求:熟悉Spring MvcSpring注解熟悉

 

工具环境:

Maven3.X

开发工具:Eclipse oxygenSpring Tool Suite(STS)IDEA

JDK1.8版本

Spring Boot1.5.7.RELEASE

 

 

构建Maven项目

1、经过SPRING INITIALIZR构建maven项目:

2、手动构建:

1.新建spring-boot-helloword文件

2.新建文件夹src/main/javasrc/main/resourcessrc/test/javasrc/test/resources

2.新建pom.xml文件,内容:

<modelVersion>4.0.0</modelVersion>

<groupId>fun.deepsky.springboot</groupId>

<artifactId>spring-boot-helloword</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<name>spring-boot-helloword</name>

 

<parent>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-parent</artifactId>

  <version>1.5.7.RELEASE</version>

  <relativePath /> <!-- lookup parent from repository -->

</parent>

 

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

</properties>

 

<dependencies>

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

  </dependency>

  <dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-test</artifactId>

  </dependency>

</dependencies>

 

<build>

  <plugins>

    <plugin>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-maven-plugin</artifactId>

    </plugin>

  </plugins>

</build>

 

 

Spring Boot Starter

Spring Boot Starter

Spring Boot生态中被称为Starter POMs,是一系列的轻便依赖包,是一套一站式Spring相关技术的解决方案,开发者在使用和整合时,没必要关注依赖配置,只须要引入对应的模块便可。

 

如开发web应用,只须要引入spring-boot-starter-webStarter会自动引入如下jar包:

org.springframework.boot:spring-boot-starter
org.springframework.boot:spring-boot-starter-tomcat
org.springframework.boot:spring-boot-starter-validation
com.fasterxml.jackson.core:jackson-databind
org.springframework:spring-web
org.springframework:spring-webmvc

 

主类

建立Application.java

 

@SpringBootApplication

@RestController

public class Application {

 

       public static void main(String[] args) {

               SpringApplication.run(Application.class, args);//

       }

       @RequestMapping(“/index”) //

       public String index() {

             return "hello world";

       }

}

 

①:对容器进行参数,经过SpringApplicationBuilder来对SpringApplication的属性进行配置。如

new SpringApplicationBuilder(Application.class).bannerMode(Mode.OFF).web(true).run(args);

②:增长web访问路径,默认为get访问

启动,访问:http://localhost:8080/index

相关文章
相关标签/搜索