java架构之路-(微服务专题)初步认识微服务与nacos初步搭建
历史演变:
以前我们都是一个war包,包含了很多很多的代码,反正我开始工作的时候做的就是这样的项目,一个金融系统,代码具体多少行记不清楚了,内部功能超多,但是实际能用到的不多,代码冗余超大,每次部署大概要10分钟以上。
这个war包包含了我们的所有,jsp、js、css、java代码。代码很臃肿,每次改BUG很容易“碰瓷”。还有很多很多的不方面,这里就不一一列举了。画个图~!
慢慢的我们的用户越来越多了,一台服务器扛不住了,我们于是乎有横向扩展,有了nginx,貌似可以解决我们的一些问题了。
但是...假如我们现在要一个宝淘商城,内部包含内部订单模块,积分模块,支付模块,用户模块等等,都挤在一个war包,假如订单模块需要电脑的磁盘IO,支付模块需要我们的CPU计算,这样我们的服务器一定是既有一个好的CPU又有一个好的磁盘,也会造成我们的服务器成本很高。
貌似这样可以解决了问题,但是还不是最优质的,这时来了一个大佬,马丁福勒,就是这个人。他第一次提出了微服务的思想。我们来简单拆分一下。
及时用户量大增,我们觉得我们的订单服务有压力了,我们只需要增加我们的订单服务的服务器就可以了。
我们来明确几个定义,什么是微服务?什么又是微服务架构?
微服务:微服务核心就是把传统的单机应用,根据业务将单机应用拆分为一个一个的服务,彻底的解耦,每一个服务都是提供特定的功能,一个服务只做一件事,类似进程, 每个服务都能够单独部署,甚至可以拥有自己的数据库。这样的一个一个的小服务就是 微服务。这个是摘自马丁福勒的文章。比如我们的订单服务,可以成为一个微服务,我们的积分服务,也可以成为一个微服务。
微服务架构:微服务架构是指把 一个一个的微服务组合管理起来,对外提供一套完整的服务。
对比优缺点:
我们现在有了微服务架构,难道我们所有的项目都可以调整为微服务架构吗?我们来看看传统架构和微服务架构的优缺点。
传统架构优点:
①.就一个war包,运维超级幸福。
②.架构简单明了,没有那些分布式事务,分布式锁等等问题。
传统架构缺点:
①.代码臃肿,每个程序员需要了解所有模块的代码。
②.代码质量参差不齐,每次改BUG容易碰瓷。
③.不便于做扩展,架构限制性强,扩展成本高。
④.部署难,代码行过多,部署半小时很正常。
⑤.如果一个非核心模块出现问题,会造成整体系统不可用,比如积分模块内存溢出,倒置整个系统宕机。
看起来传统架构缺点还是不少的,但是也不是每个项目都适合微服务架构的,比如一个小OA系统,本来功能就不多,你没有必要去拆分服务了,对吧~!我们再来看看微服务给我们带来了什么优缺点吧。
微服务的优点:
①.程序员不需要了解整体业务,只需专心研究自己关注的业务即可。
②.改BUG时不用提心吊胆,顶多影响自己的服务不可用,不会导致整体不可用。
③.便于后期的扩展,也可以随时应对需求的变化。
微服务的缺点:
①.部署困难,对于运维人员有一些压力(k8s+docker+jenkis )
②.服务之间的通讯增加了通讯成本。
③.带来了分布式事务,分布式锁,分布式JOB等等问题等待我们来解决。
微服务的适用场景:合适,大型复杂的项目(来自单体架构200W行代码的恐惧) ,适合快速迭代的项目(来自一天一版的恐惧) ,适合并发高的项目(考虑弹性伸缩扩容的恐惧) ,但我们的微服务不合适那些业务稳定,就是修修bug ,改改数据的系统,迭代周期长,发版频率一二个月一次的稳定系统。
微服务架构是一个架构风格, 提倡
①.将一个单一应用程序开发为一组小型服务。
②.每个服务运行在自己的进程中。
③.服务之间通过轻量级的通信机制(http rest api)
④.每个服务都能够独立的部署
⑤.每个服务甚至可以拥有自己的数据库
搭建nacos:
终于到了我们的代码环节,好讨厌写那些理论的定义。
eureka很多人都知道,我们的nacos和eureka的功能差不多,就是eureka是springcloud netflix的nacos是springcloud alibaba的。
nacos的官网是这样说的:Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。
我们尽快进入我们的代码环节吧。
1.下载地址https://github.com/alibaba/Nacos/releases

2.下载完成直接解压即可。命令:tar -zxvf nacos-server-1.1.4.tar.gz
3.切换到nacos目录下的bin目录,输入./startup.sh -m standalone启动即可。
4.输入lsof -i:8848,检查我们的服务是否启动成功。
5.在地址栏输入http://你服务器的IP:8848/nacos访问即可。账号nacos,密码nacos,注意你自己的防火墙关闭,端口外部访问打开。
单机的nacos就搭建完成了,我们来看看如何用springboot来配置nacos。
nacos集群配置
①.需要我们自己提前安装一个nginx和mysql,我以前写过怎么安装nginx和mysql的文章,大家不会配置的可以去看一下。
我的nginx配置文件如下
upstream nacos_cluster {
server 192.168.138.110:8848;
server 192.168.138.111:8848;
server 192.168.138.112:8848;
} server {
listen 80;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location /nacos {
proxy_set_header Host $host;
proxy_pass http://nacos_cluster/nacos;
}
②.修改nacos配置,切换到我们的nacos的conf目录下,将cluster.conf.example文件拷贝一份,重命名为cluster.conf。将要集群的IP和端口加入进去,例如
192.168.138.110:8848
192.168.138.111:8848
192.168.138.112:8848
③.修改application.properties配置文件,加入mysql配置
spring.datasource.platform=mysql
# 数据库实例数量
db.num=1
# 自己数据库的连接信息
db.url.0=jdbc:mysql://192.168.138.119:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
④.初始化数据库文件,脚本文件在你的nacos的conf下,有一个nacos-mysql.sql文件。
⑤.启动,走起。分别访问http://192.168.138.119/nacos(nginx地址)、http://192.168.138.110/nacos、http://192.168.138.111/nacos、http://192.168.138.112/nacos
总结:
目前为止,我们应该对于微服务和微服务架构有一定了解了。这次我们主要说的我们的注册中心nacos的搭建,和怎么把服务注册到我们的nacos中去,还有我们的nacos的集群搭建,nacos还没完事呢,后面我会出nacos的使用,和内部的一些概念,比如组,版本什么的,到时候看看和ribbon一起说吧。下次博客我们来说说我们的eureka配置吧。
最进弄了一个公众号,小菜技术,欢迎大家的加入
java架构之路-(微服务专题)初步认识微服务与nacos初步搭建的更多相关文章
- java架构之路-(Redis专题)Redis的主从、哨兵和集群
我们使用的redis,单机的绝对做不到高可用的,万一单机的redis宕机了,就没有备用的了,我们可以采用集群的方式来保证我们的高可用操作. 主从架构 大致就是这样的,一个主节点,两个从节点(一般两个就 ...
- java架构之路-(netty专题)初步认识BIO、NIO、AIO
本次我们主要来说一下我们的IO阻塞模型,只是不多,但是一定要理解,对于后面理解netty很重要的 IO模型精讲 IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式: ...
- java架构之路-(Redis专题)SpringBoot连接Redis超简单
上次我们搭建了Redis的主从架构,哨兵架构以及我们的集群架构,但是我们一直还未投入到实战中去,这次我们用jedis和springboot两种方式来操作一下我们的redis 主从架构 如何配置我上次已 ...
- java架构之路-(Redis专题)聊聊大厂那些redis
上几次说了redis的主从,哨兵,集群配置,但是内部的选举一直没说,先来简单说一下选举吧. 集群选举 redis cluster节点间采取gossip协议进行通信,也就是说,在每一个节点间,无论主节点 ...
- java架构之路-(Redis专题)redis面试助力满分+
1.Redis支持的数据类型? 答:五种,在第一节redis相关的博客我就说过,String,Hash,List,Set,zSet,也就是我们的字符串,哈希,列表,集合,有序集合五种.结构图如下. 2 ...
- java架构之路-(MQ专题)RabbitMQ安装和基本使用
RabbitMQ安装 我这里安装是使用阿里云的CentOS7.5来安装的,使用CentOS版本低于7的可能会报错. 1.安装rabbitmq所需要的依赖包 输入$ yum install build- ...
- java架构之路-(MQ专题)RocketMQ从入坑到集群详解
这次我们来说说我们的RocketMQ的安装和参数配置,先来看一下我们RocketMQ的提出和应用场景吧. 早在2009年,阿里巴巴的淘宝第一次提出了双11购物狂欢节,但是在2009年,服务器无法承受到 ...
- java架构之路(MQ专题)kafka集群配置和简单使用
前面我们说了RabbitMQ和RocketMQ的安装和简单的使用,这次我们说一下Kafka的安装配置,后面我会用几个真实案例来说一下MQ的真实使用场景.天冷了,不愿意伸手,最近没怎么写博客了,还请见谅 ...
- java架构之路-(netty专题)netty的基本使用和netty聊天室
上次回顾: 上次博客,我们主要说了我们的IO模型,BIO同步阻塞,NIO同步非阻塞,AIO基于NIO二次封装的异步非阻塞,最重要的就是我们的NIO,脑海中应该有NIO的模型图. Netty概念: Ne ...
- java架构之路-(netty专题)netty的编解码(出入战)与粘包拆包
上次回归: 上次博客我们主要说了netty的基本使用,都是一些固定的模式去写的,我们只需要关注我们的拦截器怎么去写就可以了,然后我们用我们的基础示例,改造了一个简单的聊天室程序,可以看到内部加了一个S ...
随机推荐
- 动态规划之抢劫问题-LT213
找到大问题和小问题之间共有的特性,列出一定的状态转移规律,然后设计满足条件的小问题解决方案,最后凭借记忆中的中间值快速求出最终解 动态规划问题的复杂性在于你永远不知道下一个题目中的状态是什么,有什么样 ...
- 【转】Matlab多项式拟合
转:https://blog.csdn.net/hwecc/article/details/80308397 例: x = [0.33, 1.12, 1.41, 1.71, 2.19] y = [0. ...
- 【转】iOS 7免费设计资源汇总
原文链接:http://mobile.51cto.com/hot-406317.htm#585532-tsina-1-28470-7e393678b940a4d55500bf3feae3d2e9 以下 ...
- 进一步学习 nox 教程,轻松掌握命令行用法
英文 |Command-line usage 出处 | nox 官方文档 译者 | 豌豆花下猫@Python猫 Github地址:https://github.com/chinesehuazhou/n ...
- Docker学习(一)环境准备安装centos7
前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完全使用沙箱机 ...
- Python Global和Nonlocal的用法
nonlocal 和 global 也很容易混淆.简单记录下自己的理解. 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值. global 语句是一个声明,它适用于整个当 ...
- 【原创】CentOS8双网卡绑定
1. NAT网络配置(所有服务器): # yum install bash-completion # cd /etc/sysconfig/network-scripts/ bond0配置: # vim ...
- basic-pentesting-1 靶机提权
原文地址:https://www.payload.com.cn/ basic-pentesting-1 下载地址: https://www.vulnhub.com/entry/basic-pent ...
- c#移位运算符("<<"及">>")
C#是用<<(左移) 和 >>(右移) 运算符是用来执行移位运算. 左移 (<<) 将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0. 左移相当于乘. ...
- 《高性能MySQL》之MySQL查询性能优化
为什么查询会慢? 响应时间过长.如果把查询看做是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数, ...