【Express.js】微服务架构

微服务架构

微服务

微服务架构是将一个单体应用程序拆分为一个个独立且保持松耦合的服务的一种架构方式,每个服务有着独立的数据库并且能独立运行部署,所有的服务最终可以被视作一个集群而进行统一管理

优缺点

从微服务的理念着手,它的优缺点绝大部分能通过与单体应用相对比得出

优点

微服务的优点,就是解决了单体应用的痛点

  • ★ 高可维护性与高可拓展性
    随着时间的推移,单体项目将不可避免的臃肿无比且交错杂乱,高耦合的屎山代码使得每一次维护与拓展都变得胆战心惊。而微服务将完整系统中的每一个模块抽离出来,使得业务更加清晰耦合度降低,维护与拓展将会容易很多
  • ★ 程序构建与迭代高效
    原本庞大的单体项目修改了源码之后需要整个项目进行重新编译与运行,如果体量足够大,可是要不少时间。拆分为微服务后,只需要重新编译与运行有限的几个微服务即可,由于微服务的体量小很多并且可以并行构建,效率肉眼可见的高
  • ★ 系统稳定与健壮性增强
    一体的单体应用中如果某一环出了问题,可能导致整个系统瘫痪的重大事故,而独立且松耦合的微服务系统,完全可以将瘫痪的范围缩小到有限的部分微服务上,而不至于导致整个系统下架维护
  • ★ 打破技术限制与瓶颈
    毕竟微服务是独立开来的,因此每个微服务完全可以采取不同的语言与开发环境,以适应各自的特色业务需求,比如需要强劲算力的微服务可以采用Rust语言和更快的GPU硬件,需要图形计算的微服务可以使用Neo4j作为数据库等等

缺点

当然了,微服务也是一把双刃剑,在解决了单体服务的痛点的同时,由于分布式的架构不可避免的带了一些原本不存在的挑战

  • 运维与部署成本高
    单体应用不出意外就一个应用程序和一个数据库,运维和部署是很容易的。虽然微服务的每个独立服务可以通过CI/CD实现自动化构建与部署,但考虑到各个微服务的特性与独立的数据,可能需要多台不同的服务器,配置过程也较为繁琐
  • 分布式系统的复杂性
    由于微服务架构遵从分布式,这将带来许多挑战与困难,比如系统容错、数据同步、分布式事务、网络延迟等等的问题
  • 通信接口维护成本高
    微服务之间通过内部的api交互,当其中一个api变动,其他依赖它的服务都需要做出相应的调整

设计原则

  • 单一职责原则
    微服务各司其职,只关心完整系统中的一部分功能
  • 服务自治原则
    微服务高度独立,与其他服务保持松耦合状态,在开发、测试、部署的过程中应当能做到独立运行而不强制依赖其他服务
  • 轻量级通信机制
    微服务之间相互通信,应该通过某些比较便捷且支持跨语言跨平台的手段,比如 Rest Api,比如消息队列等
  • 合理粒度原则
    合理地划分微服务的粒度,不是说代码量少就等于适合做成微服务,更要业务复杂性的体量以及与其他服务之间的关联程度

技术选型

在微服务落地中,有着一些非常不错的开源框架可供选择

  • SpringCloud 一款非常优秀且成熟的微服务开源框架
  • Dubbo 阿里开源的一款微服务框架
  • Spring Cloud Alibaba 阿里开源的基于SpringCloud的框架
  • Open Feign 出自Spring社区的Restful服务通信组件
  • Nacos 阿里开源的一款强大的服务注册中心
  • Seata 阿里和蚂蚁开源的分布式事务解决方案
  • Nginx 高性能http和反向代理服务器
  • Docker 实现微服务的容器化部署

借助已有的优秀开源框架,将帮助我们更好的理解和实践微服务架构。

下一章-evp-express-cli

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/40475.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux之Ubuntu系列(-)常见指令 重定向

Ubuntu 中文 版本 注意点 通过修改语言改成英文 在终端录入:export LANGen_US 在终端录入:xdg-user-dirs-gtk-update 单用户和多用户 命令格式 command [-选项] [参数] –查看命令的帮助 命令 --help man 命令 |操作键| 功能| |空格键|-显示手册的下…

B070-项目实战-用户模块--手机注册

目录 用户模块需求分析静态网站部署与调试两种前端项目的部署两种前端项目的调试(热部署)创建静态web项目 注册分析与设计分析需求设计 界面设计(ui)设计表(后台) 流程设计(后台)三范式表设计流程设计 相关…

Appium+python自动化(十二)- Android UIAutomator终极定位凶器(超详解)

简介 乍眼一看,小伙伴们觉得这部分其实在异性兄弟那里就做过介绍和分享了,其实不然,上次介绍和分享的大哥是uiautomatorviewer,是一款定位工具。今天介绍的是一个java库,提供执行自动化测试的各种API。 Android团队在4…

SPSS中级统计--S05-5多个样本率的卡方检验及两两比较

小伙伴们,今天我们学习SPSS中级统计--多个样本率的卡方检验及两两比较。 例1、2 C列联表资料 上期我们学习了双向无序RC表资料(c2)的检验,案例如下,比较不同污染地区的动物畸形率是否有差异? H0&#xff…

旅游管理系统的设计与实现(论文+源码)_kaic

摘 要 旅游业走过了改革开放,到现在依旧蓬勃发展。但是放眼国际社会,我们在旅游业发展的深度和广度上所做的努力还远远不够。在中国,旅游业也将成为经济崛起中的重要一环。目前,我们生活在一个信息时代里。无论是工作,…

uniapp动态获取列表中每个下标的高度赋值给另一个数组(完整代码附效果图)

uniapp实现动态获取列表中每个下标的高度&#xff0c;赋值给另一个数组。 先看效果图&#xff1a; 完整代码&#xff1a; <template><div class""><div class"">我是A列表&#xff0c;我的高度不是固定的</div><div class&qu…

Docker使用总结

Docker 1.什么是 Docker 官网的介绍是“Docker is the world’s leading software container platform.” 官方给Docker的定位是一个应用容器平台。 Docker 是一个容器平台的领导者 Docker 容器平台 Docker 应用容器平台 application项目 Mysql Redis MongoDB ElasticSeacrh …

我国版式文档格式OFD前端WEB展示之EasyOFD

EasyOFD an ofd file web shower 一个在web端展示ofd文件的控件&#xff0c;该控件基于CANVAS绘制。 该控件使用了以下外部程序 1&#xff09;jszip&#xff1a;解决解压文件。 2&#xff09;x2js: 解决XML文件到JS转换 3&#xff09;easyjbig2: 解决ofd内部使用jb2文件存储的…

java项目之足球赛会管理系统(ssm+mysql+jsp)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的足球赛会管理系统。技术交流和部署相关看文章末尾&#xff01; 项目地址&#xff1a; https://download.csdn.net/download/sinat_26552841…

什么是渲染?一文看懂,萌新赶紧收藏码住!

十四五规划提出“加快数字化发展&#xff0c;建设数字中国”&#xff0c;数字技术的快速发展&#xff0c;从起初的内容创建到最终的效果呈现&#xff0c;都离不开渲染技术。目前&#xff0c;渲染技术被广泛应用于教育、医疗、影视动画、建筑设计等多个领域。它能有效满足用户对…

docker基础1——架构组成、安装配置

文章目录 一、发展起源1.1 传统虚拟化与容器虚拟化1.2 docker底层核心技术1.2.1 命名空间1.2.2 控制组 1.3 docker工作方式1.4 docker容器编排1.5 docker优劣势1.6 docker架构组成 二、yum安装docker三、配置docker加速器 一、发展起源 背景了解&#xff1a; 容器是内核里的一项…

【Python】PyCharm中调用另一个文件的函数或类

&#x1f389;欢迎来到Python专栏~PyCharm中调用另一个文件的函数或类 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;Python学习专栏 文章作者技术和水平有限&#xff0c;如果文中出现错误&…

Langchain-ChatGLM配置文件参数测试

1 已知可能影响对话效果的参数&#xff08;位于configs/model_config.py文件&#xff09;&#xff1a; # 文本分句长度 SENTENCE_SIZE 100# 匹配后单段上下文长度 CHUNK_SIZE 250 # 传入LLM的历史记录长度 LLM_HISTORY_LEN 3 # 知识库检索时返回的匹配内容条数 VECTO…

leetcode 9 回文数

class Solution {public boolean isPalindrome(int x) {if(x < 0){return false;}int num x;int value 0;while(num > 0){value value * 10 num % 10;num num / 10;}return value x;} }

golang 日志库logrus和lumberjack 日志切割库实践

package mainimport (log "github.com/Sirupsen/logrus""gopkg.in/natefinch/lumberjack.v2" )func main() {logger : &lumberjack.Logger{// 日志输出文件路径Filename: "/var/log/myapp/foo.log",// 日志文件最大 size, 单位是 MBMaxSiz…

【问题解决】VSCode 远程安装插件特别慢

【问题描述】 我要配置 VSCode WSL 的开发环境&#xff0c;需要在 WSL 里也装上 C、CMake 系列的插件&#xff0c;如下图的直接下载方式特别慢&#xff1a; 【解决方法】 先去网站下载插件&#xff1a;https://marketplace.visualstudio.com/&#xff0c;后缀名&#xff1a;…

re学习(18)[ACTF新生赛2020]rome1(Z3库+window远程调试)

参考视频: Jamiexu793的个人空间-Jamiexu793个人主页-哔哩哔哩视频 代码分析&#xff1a; 其主要内容在两个while循环中&#xff08;从定义中可知flag位16个字符&#xff09;。 看第二个循环&#xff0c;可知是比较result和经过第一个循环得到的v1比较&#xff08;就是flag…

Django MultiValueDictKeyError 表单数据用request.POST 非表单数据用request.body

表单数据&#xff1a;Content-Type(请求头)为application/x-www-form-urlencoded的数据。 用request.POST获取 a request.POST.get(a) a request.POST[a] alist request.POST.getlist(a) 非表单数据&#xff1a;Content-Type(请求头)为非application/x-www-form-urlenco…

Ghost Buster Pro for mac(快速清理卸载的应用残存文件)

Ghost Buster Pro for mac可从您已卸载的应用程序中查找并删除文件。该应用程序速度快如闪电&#xff0c;可立即释放内存。 许多应用程序都安装在计算机上&#xff0c;但它们通常只会在您的计算机上停留很短的时间。每个应用程序都会创建文件&#xff0c;但删除应用程序不会删…

create database创建数据库失败

瀚高数据库 目录 环境 症状 问题原因 解决方案 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.7 症状 1、执行如下sql语句创建数据库报错。 create database printcdburn with encodingUTF8 OWNERprintcdburn LC_COLLATEzh_CN.UTF-…
最新文章