初谈对微服务的了解

来源:互联网 发布:java http协议发送报文 编辑:程序博客网 时间:2024/05/22 06:39

初谈对微服务的了解

 

导读:微服务倡导将一个原本独立的系统分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful 轻量级API进行通信协作。

 

一、单体式应用

1.1 简介

应用核心是业务逻辑,由定义服务、域对象和事件的模块完成。尽管也是模块化逻辑,但是最终它还是会打包并部署为单体式应用。具体的格式依赖于应用语言和框架。例如,许多Java应用会被打包为WAR格式,部署在Tomcat,单体式应用易于部署,只需要把打包应用拷贝到服务器端,通过在负载均衡器后端运行多个拷贝就可以轻松实现应用扩展。在早期这类应用运行的很好

1.2 单体式应用的不足

l     交付周期变长:用程序做任何细微的修改以及代码提交,都会触发对整个应用程序进行代码编译、运行单元测试、代码检查、构建并生成部署包、验证功能等,这也就版本的反馈周期变长,单位时间内构建的效率变得很低。

l     可伸缩性差:应用程序的所有功能代码都运行在同一个服务器上,将会导致应用程序的水平扩展非常困难

l     项目巨大:一个简单的应用会随着时间推移逐渐变大。然后开发许多新代码。几年后,这个小而简单的应用会变成了一个巨大的怪物。单体式应用也会降低开发速度。应用越大,启动时间会越长,那么大部分时间就要在等待中渡过,生产效率受到极大影响。

l     可靠性差:单体式应用另外一个问题是可靠性。因为所有模块都运行在一个进程中,任何一个模块中的一个bug,比如内存泄露,将会有可能弄垮整个进程。除此之外,因为所有应用实例都是唯一的,这个bug将会影响到整个应用的可靠性。单体式应用使得采用新架构和语言非常困难。

l     新人培养周期变长:应用程序的功能越来越多,代码变得越来越复杂的同时,对于新加入团队的成员而言,了解业务背景、熟悉应用程序、配置本地开发环境,这些看似简单的任务,却会花费了更长的时间。

二、微服务简介

2.1 什么是微服务

  In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

简单的说,微服务是软件系统架构上的一个设计风格,它倡导将一个原本独立的系统分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTPRESTful轻量级API进行通信协作。被拆分的每个微服务围绕系统中的某项或一些耦合度较高的业务进行构建,并且每个服务都维护着自身的数据存储、业务开发、自动化测试案例以及独立部署机制。由于有了轻量级通信机制,这些微服务间可以使用不通的语言来编写。

2.2 微服务的优点

l 核心业务抽取出来,作为独立的服务对外服务。

l 服务模块持续独立部署,减少版本交付周期。

l 大量使用缓存,提高访问。

l 服务间可以使用不通的语言来编写。

l 服务间的耦合性降低。

 

使用 Spring Cloud 作为微服务开发框架,Spring Boot拥有嵌入式Tomcat,可直接运行一个jar包来发布微服务,此外它还提供了一系列“开箱即用”的插件,例如:配置中心,服务注册与发现,熔断器,路由,代理,控制总线,一次性令牌,全局锁,leader选举,分布式 会话,集群状态等,可大量提高我们的开发效率。

2.3 创建注册中心

创建服务注册中心

只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上加

@EnableEurekaServer

@SpringBootApplication

public class EurekaserverApplication {

 

    public static void main(String[] args) {

        SpringApplication.run(EurekaserverApplication.class, args);

    }

}

eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成),在默认情况下erureka server也是一个eureka client ,必须要指定一个server

eureka server的配置文件appication.yml

server:

  port:8081

 

eureka:

  instance:

    hostname: localhost

  client:

    registerWithEureka:false

    fetchRegistry:false

    serviceUrl:

      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

 

yml是一个可读性高,用来表达资料序列的编程语言,特别注意缩进规则

访问 http://localhost:8081/

 

以上则完成了对服务中心的创建。

三、总结

总结一下,本文从我们微服务实践的背景聊起,初步介绍了微服务的概念,微服务其实还包含很多知识,其中包括:API网关、注册中心、断路器等。此后我会像着项目组的各位同事一样对微服务进行更深度的学习,在此感谢各位的耐心的阅读,谢谢!

原创粉丝点击