从单体架构到微服务架构
一、架构演变
1、系统架构、集群、分布式系统
简单理解
(1)什么是系统架构?
12345【什么是系统架构?】 系统架构 描述了 在应用程序内部,如何根据 业务、技术、灵活性、可扩展性、可维护性 等因素,将系统划分成不同的部分并使这些部分相互分工、协作,从而提高系统的性能。 【简单的理解:】 系统架构是 程序运行 的基石、其决定了程序是否能正确、有效的构建 以及 稳定的运行。
(2)集群
12345678910【什么是集群?】 计算机集群简称集群,是一种计算机系统,它通过一组松散集成的计算机软件或硬件连接起来、高度紧密地协作完成计算工作。 在某种意义上,他们可以被看作是一台计算机。 集群系统中的单个计算机通常称为节点,通常通过局域网连接(或者其它的连接方式)。 集群计算机通常用来改进单个计算机的计算速度或可靠性。【简单的理解:】 通过多台计算机完成同一个工作,达到更高的效率。 两机或多机内容、工作过程等完全一样。如果一台死机,另一台可以起作用。 同一个业务,部署在多个服务器上(不同的服务器运行同样的 ...
K3s介绍
简介
官网 Github
K3s 是轻量级的 Kubernetes。K3s 易于安装,仅需要 Kubernetes
内存的一半,所有组件都在一个小于 100 MB 的二进制文件中。
它适用于
Edge
IoT
CI
Development
ARM
嵌入 K8s
不去学习那么多的 Kubernetes 高深知识也能上手使用
什么是 K3s
K3s 是一个完全兼容的 Kubernetes 发行版,具有以下增强功能:
打包为单个二进制文件。
使用基于 sqlite3 作为默认存储机制的轻量级存储后端。同时支持使用
etcd3、MySQL 和 Postgres。
封装在简单的启动程序中,可以处理很多复杂的 TLS 和选项。
默认情况下是安全的,对轻量级环境有合理的默认值。
添加了简单但强大的 batteries-included 功能,例如:
本地存储提供程序
service load balancer
Helm controller
Traefik ingress controller
所有 Kubernetes control plane
组件的操作都封装在单个二进制文件 ...
概述
Redis
是一个开源的高性能键值数据库,它支持多种数据类型,可以满足不同的业务需求。本文将介绍
Redis 的10种数据类型,分别是
注:前5个是比较常用的
string(字符串)
hash(哈希)
list(列表)
set(集合)
zset(有序集合)
stream(流)
geospatial(地理)
bitmap(位图)
bitfield(位域)
hyperloglog(基数统计)
String
概述
string 是 Redis
最基本的数据类型,它可以存储任意类型的数据,比如文本、数字、图片或者序列化的对象。一个
string 类型的键最大可以存储 512 MB 的数据。
string 类型的底层实现是 SDS(simple dynamic
string),它是一个动态字符串结构,由长度、空闲空间和字节数组三部分组成。SDS有3种编码类型:
embstr:占用64Bytes的空间,存储44Bytes的数据
raw:存储大于44Bytes的数据
int:存储整数类型
embstr和raw存储字符串数据,int存储整型数据
应用场景
string 类型的应用场景非常 ...
wireguard组建一个内网环境
简介:自己想建立一个,稳定,安全的组网环境,之前有用zerotier,并且自己搭建了moon,但有时候也会存在链接不上情况,毕竟服务器是是他们三方搭建的,而且在国外,安全和稳定性都不靠谱,所以只有自己搭建一套组网环境,才是最可靠的
什么是wireguard
WireGuard® is an extremely simple yet fast and modern VPN that
utilizes state-of-the-art cryptography. It aims to be faster, simpler,
leaner, and more useful than IPsec, while avoiding the massive headache.
It intends to be considerably more performant than OpenVPN. WireGuard is
designed as a general purpose VPN for running on embedded interfaces and
...
Maven依赖中的Scope详解
scope元素的作用:控制 dependency
元素的使用范围。通俗的讲,就是控制 Jar 包在哪些范围被加载和使用。
scope具体含义如下:
compile(默认)
含义:compile 是默认值,如果没有指定 scope 值,该元素的默认值为
compile。被依赖项目需要参与到当前项目的编译,测试,打包,运行等阶段。打包的时候通常会包含被依赖项目。
provided
含义:被依赖项目理论上可以参与编译、测试、运行等阶段,相当于compile,但是再打包阶段做了exclude的动作。
适用场景:例如, 如果我们在开发一个web 应用,在编译时我们需要依赖
servlet-api.jar,但是在运行时我们不需要该 jar 包,因为这个 jar
包已由应用服务器提供,此时我们需要使用 provided 进行范围修饰。
runtime
含义:表示被依赖项目无需参与项目的编译,但是会参与到项目的测试和运行。与compile相比,被依赖项目无需参与项目的编译。
适用场景:例如,在编译的时候我们不需要 JDBC API 的 jar
包,而在运行的时候我们才 ...
部署说明
1.因为我这里是用的腾讯云服务所以需要打开对应的安全组,如果是虚拟机的话配置对应的虚拟机即可这里就不做说明了网上有
1.建议升级内核至4.18版本以上否则可能会出现内存溢出的bug
2.k8s在1.24版本剔除了docker做为容器运行时,因此如果想继续使用docker需要安装cri-docker
3.如果开启ipvs还需要安装ipvsadm (可选)
软件环境
软件
版本
操作系统
CentOS7.9_x64
docker
20.10.22
cir-docker
0.3.0
Kubernetes
1.26.0
服务器
角色
IP
组件
qcloud-host01
1.117.115.10
qcloud-node01
134.175.228.10
升级系统以及内核
1234567891011121314#升级系统yum update -y --exclude=kernel*#升级内核(下载最新的版本)wget https://mirrors.aliyun.com/elrepo/kernel/el7/ ...
一、背景
在微服务架构中 API网关
非常重要,网关作为全局流量入口并不单单是一个反向路由,更多的是把各个边缘服务(Web层)的各种共性需求抽取出来放在一个公共的“服务”(网关)中实现,例如安全认证、权限控制、限流熔断、监控、跨域处理、聚合API文档等公共功能。
在以 Dubbo
框架体系来构建的微服务架构下想要增加API网关,如果不想自研开发的情况下在目前的开源社区中几乎没有找到支持dubbo协议的主流网关,但是
Spring Cloud
体系下却有两个非常热门的开源API网关可以选择;本文主要介绍如何通过
Nacos 整合 Spring Cloud Gateway 与
Dubbo 服务。
二、传统 dubbo 架构
dubbo属于rpc调用,所以必须提供一个web层的服务作为http入口给客户端调用,并在上面提供安全认证等基础功能,而web层前面对接Nginx等反向代理用于统一入口和负载均衡。
web层一般是根据业务模块来切分的,用于聚合某个业务模块所依赖的各个service服务
PS:我们能否把上图中的web层全部整合在一起成为一个API网关呢?(不建议这样做)
因为这样的 ...
Date工具类
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 ...
后端开发
未读MapStruct使用
简介: 背景
在一个成熟可维护的工程中,细分模块后,domian工程最好不要被其他工程依赖,但是实体类一般存于domain之中,这样其他工程想获取实体类数据时就需要在各自工程写model,自定义model可以根据自身业务需要而并不需要映射整个实体属性。
背景
在一个成熟可维护的工程中,细分模块后,domian工程最好不要被其他工程依赖,但是实体类一般存于domain之中,这样其他工程想获取实体类数据时就需要在各自工程写model,自定义model可以根据自身业务需要而并不需要映射整个实体属性。
mapstruct这个插件就是用来处理domin实体类与model类的属性映射,定义mapper接口,mapstruct就会自动的帮我们实现这个映射接口,避免了麻烦复杂的映射实现。
Github地址:https://github.com/mapstruct/mapstruct/
使用例子:https://github.com/mapstruct/mapstruct-examples
如何使用?
1、简单封装
123456789101112131415161718192 ...
北极星是什么?
北极星是腾讯开源的服务发现和治理中心,致力于解决分布式或者微服务架构中的服务可见、故障容错、流量控制和安全问题。虽然,业界已经有些组件可以解决其中一部分问题,但是缺少一个标准的、多语言的、框架无关的实现。
具体概念在这就不多做介绍了有兴趣的可以去北极星官网查阅介绍(http://polarismesh.cn/)