一、背景介绍:
传统的it架构的缺陷:
使用传统的整体式架构(Monolithic Architecture)应用开发系统,如CRM、ERP等大型应用,随着新需求的不断增加,企业更新和修复大型整体式应用变得越来越困难;
随着移动互联网的发展,企业被迫将其应用迁移至现代化UI界面架构以便能兼容移动设备,这要求企业能实现应用功能的快速上线;
许多企业在SOA投资中得到的回报有限,SOA可以通过标准化服务接口实现能力的重用,但对于快速变化的需求,受到整体式应用的限制,有时候显得力不从心;
二、什么是微服务?
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程。
三、微服务中的spring-cloud
Spring Cloud是一个相对比较新的微服务框架,2016n年推出1.0的release版本. 虽然Spring Cloud时间最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决方案。
Spring Cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全居琐,leader选举,分布式session,集群状态)中快速构建的工具,使用Spring Cloud的开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。
三、什么是Eureak?
Eureak的结构特点
1. 是纯正的 servlet 应用,需构建成war包部署
2. 使用了 Jersey 框架实现自身的 RESTful HTTP接口
3. peer之间的同步与服务的注册全部通过 HTTP 协议实现
4. 定时任务(发送心跳、定时清理过期服务、节点同步等)通过 JDK 自带的 Timer 实现
5. 内存缓存使用Google的guava包实现
四、实战
![](https://i-blog.csdnimg.cn/blog_migrate/33ed7de65cd0df931b21ca4a2d3bfab5.webp?x-image-process=image/format,png)
项目结构如下
![](https://i-blog.csdnimg.cn/blog_migrate/1dd3a22ac1dc783ed1a45e2e138b366b.webp?x-image-process=image/format,png)
首先创建moduel
![](https://i-blog.csdnimg.cn/blog_migrate/a8c945e23f88df991f7eb7eaa7f144d4.webp?x-image-process=image/format,png)
moudel里面创建服务:
![](https://i-blog.csdnimg.cn/blog_migrate/79ee3f8944d7d32e83d6c0ac0332a478.webp?x-image-process=image/format,png)
配置application.yml
![](https://i-blog.csdnimg.cn/blog_migrate/4ac87a1b5652e3c1c5834c8d5ab95662.webp?x-image-process=image/format,png)
完成运行DemoApplication启动服务
结果如图:
![](https://i-blog.csdnimg.cn/blog_migrate/472c1baff6cd883502259aaf4a9c086f.webp?x-image-process=image/format,png)
界面如下,Application为空说明没有注册service。
接下来我们编写service-client
同样创建model
![](https://i-blog.csdnimg.cn/blog_migrate/2d84624342a988fd085c527218111a79.webp?x-image-process=image/format,png)
编写配置文件:
![](https://i-blog.csdnimg.cn/blog_migrate/f0b0c675ce464795b5ebd3c0938b9c25.webp?x-image-process=image/format,png)
使用简单controller编写,告诉这个是Client端
![](https://i-blog.csdnimg.cn/blog_migrate/1d23a83de6323e26b6b6033f37eca18b.webp?x-image-process=image/format,png)
启动服务
启动成功界面如图:
![](https://i-blog.csdnimg.cn/blog_migrate/867fce4321887dbabd4f265ab7504066.webp?x-image-process=image/format,png)
查看我们的server:
![](https://i-blog.csdnimg.cn/blog_migrate/3638162622b07f36f345be6a897b0b72.webp?x-image-process=image/format,png)
这里已经注册了我们的服务。说明服务的注册与获取成功了。
![](https://i-blog.csdnimg.cn/blog_migrate/52d7ccb6f920b64af821083ae082d226.webp?x-image-process=image/format,png)
接下来使用ribbon+restTemplate实现负载均衡:
复制一个client,然后修改端口。
![](https://i-blog.csdnimg.cn/blog_migrate/1bb064a559578044f348c3c0d79e4dc9.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/5f768260c444a7437b1399d84bed1cae.webp?x-image-process=image/format,png)
方便等会测试负载均衡
创建moduel-ribbon
![](https://i-blog.csdnimg.cn/blog_migrate/9e4eb97398e9e6a3f8a4b03be23e93ca.webp?x-image-process=image/format,png)
结构如上
首先配置application.yml
![](https://i-blog.csdnimg.cn/blog_migrate/ce013fcf416a482e27515971d38db1c1.webp?x-image-process=image/format,png)
然后在application里面加载实现负载均衡的RestTemplate
![](https://i-blog.csdnimg.cn/blog_migrate/848e8f98bcc54315c87e2c24f4b35a12.webp?x-image-process=image/format,png)
编写service和controller实现调用负载均衡
![](https://i-blog.csdnimg.cn/blog_migrate/b39dfc1796b48690c82b75819ae25c07.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/d935a3f8e0f194016ee289a70e7ada90.webp?x-image-process=image/format,png)
完成编写,启动8632的service,启动ribbon,使用http:localhost:8634/lzn?name=lzn调用,刷新发现结果为8632、8633端口服务调用平均。
这只是一个简单Eureka的调用。cloud有很多我们需要的可以学习的服务。