历史演变:

以前我们都是一个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 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。

我们尽快进入我们的代码环节吧。

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 微网站_java架构之路-(微服务专题)初步认识微服务与nacos初步搭建相关推荐

  1. java netty聊天室_java架构之路-(netty专题)netty的基本使用和netty聊天室

    上次回顾: 上次博客,我们主要说了我们的IO模型,BIO同步阻塞,NIO同步非阻塞,AIO基于NIO二次封装的异步非阻塞,最重要的就是我们的NIO,脑海中应该有NIO的模型图. Netty概念: Ne ...

  2. Java程序员进阶架构师必备学习文档:SSM+微服务+分布式+Nginx+MySQL

    SSM企业级战 SSM框架是以Spring为核心,整合Spring MVC和Mybatis的轻量级框架技术的组合.利用SSM整合框架可以开发出分层.易扩展.易维护的企业级应用系统,能够极大地满足企业需 ...

  3. java架构升级_java架构之路(多线程)synchronized详解以及锁的膨胀升级过程

    上几次博客,我们把volatile基本都说完了,剩下的还有我们的synchronized,还有我们的AQS,这次博客我来说一下synchronized的使用和原理. synchronized是jvm内 ...

  4. java zookeeper 使用场景_java架构之路-(分布式zookeeper)zookeeper真实使用场景

    上几次博客,我说了一下Zookeeper的简单使用和API的使用,我们接下来看一下他的真实场景. 一.分布式集群管理✨✨✨ 我们现在有这样一个需求,请先抛开Zookeeper是集群还是单机的概念,下面 ...

  5. java mybits架构图_java架构之路-(mybatis源码)mybatis执行流程源码解析

    这次我们来说说Mybatis的源码,这里只说执行的流程,内部细节太多了,这里只能授之以渔了.还是最近的那段代码,我们来回顾一下. packagemybatis;importmybatis.bean.S ...

  6. java 学习网站_Java学习必不可少的十大网站

    这是我为学习java的同学们准备的网站集合.这些网站提供新闻,常见问题或访谈问题的答案,精彩的讲座等.质量是好的网站的关键因素.我认为它们都具有最高的质量.在下文中,我还将分享如何使用这些网站进行学习 ...

  7. java web 图灵_java架构师学习路线-Web架构的理解

    图灵学院  java架构师学习路线-Web架构的理解 Web体系结构可以理解为具有三种,一种是仅JSP页面,即所有逻辑,业务处理和页面代码都在JSP上.在执行简单而无关紧要的程序时可以使用此方法.它速 ...

  8. java教程网站_Java教程

    java笔记:动态编译 日期:2013-05-10 点击:183 JDK6.0推出了动态编译的新功能,能够在程序中动态的写一个类,再对之进行编译.编译成class文件后就可以通过类加载方式把动态编译的 ...

  9. java 心跳框架_java架构师学习路线-如何使用Netty实现心跳检测

    心跳检测是Socket通信经常使用的保证网络连接正常的技术.那么如何实现心跳检测呢?图灵学院今天着重来为大家介绍一下如何使用Netty实现心跳检测. 1.新建java工程,并导入netty使用的jar ...

最新文章

  1. 解决ScrollView嵌套ListView高度的问题
  2. POJ.3207.Ikki's Story IV-Panda's Trick(2-SAT)
  3. 进程上下文和中断上下文
  4. 第一章 MongoDb概述
  5. GDCM:gdcm::UIDs的测试程序
  6. 以下关于CISC和RISC的叙述中,错误的是()【最全!最详细总结!】
  7. 我使用过的Linux命令之hwclock - 查询和设置硬件时钟
  8. 太原师范学院计算机科学与技术宿舍,太原师范学院宿舍条件,宿舍环境图片(10篇)...
  9. html mui按钮居中,《mui学习笔记》:自定义选项卡
  10. 为什么Python没有属性赋值的“with”语句?
  11. 【开发工具IDE】eclipse的web项目的tomcat安装部署问题
  12. 计算机子网掩码作用,子网掩码计算器有什么用,有哪些优势
  13. CSS 3 动画 实现图片动态切换
  14. python中path函数_示例1-path函数
  15. 永洪科技贺新颖:业务中台+数据中台,赋能企业核心业务
  16. GSCoolink GSV6201 TypeC/DP to HDMI2.1
  17. html怎么改变网页整体的大小,html设置浏览器大小
  18. hdu5755 Gambler Bo(高斯消元)
  19. 2022年都在说软件测试饱和了,是真的吗?
  20. 四代增强 (BTE实例详解)

热门文章

  1. 学习几个“××在内存中占几份”的若干问题
  2. hdu 1043 ,pku 1077 Eight ,八数码问题
  3. Python批量剪裁图片
  4. 求数组的子数组之和的最大值IV
  5. Angular 2+ 监听路由变化动态设置页面标题
  6. input file 获取不到Request.Files 解决办法
  7. NSUserDefaults 简介
  8. SpringMVC深度探险(三) —— DispatcherServlet与初始化主线
  9. Javascript 中的 Function对象
  10. 设计Qt风格的C++API