Sentinel : https://sentinelguard.io/zh-cn/docs/introduction.html

Sentinel 介绍
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

Sentinel 的历史
2012 年,Sentinel 诞生,主要功能为入口流量控制。
2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。
2018 年,Sentinel 开源,并持续演进。
2019 年,Sentinel 朝着多语言扩展的方向不断探索,推出 C++ 原生版本,同时针对 Service Mesh 场景也推出了 Envoy 集群流量控制支持,以解决 Service Mesh 架构下多语言限流的问题。
2020 年,推出 Sentinel Go 版本,继续朝着云原生方向演进。
2021 年,Sentinel 正在朝着 2.0 云原生高可用决策中心组件进行演进;同时推出了 Sentinel Rust 原生版本。同时我们也在 Rust 社区进行了 Envoy WASM extension 及 eBPF extension 等场景探索。
2022 年,Sentinel 品牌升级为流量治理,领域涵盖流量路由/调度、流量染色、流控降级、过载保护/实例摘除等;同时社区将流量治理相关标准抽出到 OpenSergo 标准中,Sentinel 作为流量治理标准实现。

Sentinel 功能和设计理念
流量控制
流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:

arch

流量控制有以下几个角度:

资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
运行指标,例如 QPS、线程池、系统负载等;
控制的效果,例如直接限流、冷启动、排队等。
Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。

熔断降级
什么是熔断降级
除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。这个问题和 Hystrix 里面描述的问题是一样的。

image

Sentinel 和 Hystrix 的原则是一致的: 当调用链路中某个资源出现不稳定,例如,表现为 timeout,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终产生雪崩的效果。

熔断降级设计理念
在限制的手段上,Sentinel 和 Hystrix 采取了完全不一样的方法。

Hystrix 通过线程池的方式,来对依赖(在我们的概念中对应资源)进行了隔离。这样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换的成本,还需要预先给各个资源做线程池大小的分配。

Sentinel 对这个问题采取了两种手段:

通过并发线程数进行限制
和资源池隔离的方法不同,Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响。这样不但没有线程切换的损耗,也不需要您预先分配线程池的大小。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积。当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。

通过响应时间对资源进行降级
除了对并发线程数进行控制以外,Sentinel 还可以通过响应时间来快速降级不稳定的资源。当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新恢复。

系统负载保护
Sentinel 同时提供系统维度的自适应保护能力。防止雪崩,是系统防护中重要的一环。当系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应。在集群环境下,网络负载均衡会把本应这台机器承载的流量转发到其它的机器上去。如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器也崩溃,最后导致整个集群不可用。

针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。

Sentinel 是如何工作的
Sentinel 的主要工作机制如下:

对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。
根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。
Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。

Sentry 是一个开源的非常强大的实时异常收集系统,可以为开发者的提供帮助、诊断,修复和优化其代码的性能的能力,可以用它来监控线上服务的健康状态,实时收集的异常堆栈信息可以帮助我们快速发现、定位和修复问题。支持 Web 前后端、移动应用以及游戏,90 余种主流语言和相关框架,同时还提供了非常友好的管理页面,错误告警、指派、统计等其他丰富的功能

支持很多的平台代码的错误监控:
JavaScript
Node.js
Python
PHP
Ruby
Java
React
React Native
Django
.NET
Go
Laravel
Android
Apple
Next.js
Rails
Flutter
Unity

技术文章原文:https://zhuanlan.zhihu.com/p/293863914
官方文档:https://docs.sentry.io/

转载,仅作笔记之用,原文地址:https://segmentfault.com/a/1190000039168072

文中提到一个工具

TimelineLite/TimelineMax 工具
如果单纯通过id、className 来使用 CSS 或JavaScript 自行处理动画,难度还是颇高,更重要的是,要耗费大量的时间

所以我们得借用工具,Timeline(Lite|Max)跟TweenMax是知名的GreenSock Animation Platform(简称GSAP)推出的可创建时间轴(timeline)作为动画或其他时间轴的容器,这使得整个动画控制和精确管理时间变得简单。

GSAP甚至为我们提供了Ease Visualizer来展示每种Ease function的效果

MaxScale 出手于 MariaDB 开源社区,品质有保障,以下配置摘自6.4.0版本,此版本与网上搜索得到的文章中的配置2.X版本,有很大的区别,且我没有找到可以在重启前进行配置检查的方法,重启不成功则服务就停了,尬

如果在使用读写分离时,主库也想参与读查询,需要使用 master_accept_reads=true (允许使用主服务器进行读取,默认是false)

读写分离模块的文档参考:https://mariadb.com/kb/en/mariadb-maxscale-6-readwritesplit

# MaxScale documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-6/

# Global parameters
#
# Complete list of configuration options:
# https://mariadb.com/kb/en/mariadb-maxscale-6-mariadb-maxscale-configuration-guide/

[maxscale]
threads=auto

# Server definitions
#
# Set the address of the server to the network
# address of a MariaDB server.
#

[server1]
type=server
address=172.19.0.10
port=3306
protocol=MariaDBBackend

[server2]
type=server
address=172.19.0.14
port=3306
protocol=MariaDBBackend

[server3]
type=server
address=172.19.0.15
port=3306
protocol=MariaDBBackend

# Monitor for the servers
#
# This will keep MaxScale aware of the state of the servers.
# MariaDB Monitor documentation:
# https://mariadb.com/kb/en/maxscale-6-monitors/

[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2,server3
#servers=server1
user=scalemon
password=rseEk2zHc2nFTEz7
monitor_interval=2000


# Service definitions
#
# Service Definition for a read-only service and
# a read/write splitting service.
#

# ReadConnRoute documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-6-readconnroute/

#[Read-Only-Service]
#type=service
#router=readconnroute
#servers=server1
#user=maxscale
#password=maxscale
#router_options=slave

# ReadWriteSplit documentation:
# https://mariadb.com/kb/en/mariadb-maxscale-6-readwritesplit/

[Read-Write-Service]
type=service
router=readwritesplit
servers=server1,server2,server3
user=teaidata
password=rseEk2zHc2nFTEz7
#允许使用主服务器进行读取
master_accept_reads=true

# Listener definitions for the services
#
# These listeners represent the ports the
# services will listen on.
#

#[Read-Only-Listener]
#type=listener
#service=Read-Only-Service
#protocol=MariaDBClient
#port=4008

[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006
address=0.0.0.0

官方网址:https://lnmp.org

LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Alibaba/Amazon/Mint/Oracle/Rocky/Alma/Kali/UOS/银河麒麟/openEuler/Anolis OS Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQL/PHP/Apache)、LAMP(Apache/MySQL/PHP)生产环境的Shell程序。
安装包集成了一些维护工具,比如切分nginx日志文件的脚本等,本文主要是作者收藏之用

LNMP一键安装包 V1.9正式版
主要增加了对rocky linux 、alma linux、CentOS Stream 9及国产Linux(UOS统信、银河麒麟、华为openEuler、龙蜥Anolis OS)的支持;增加了exif、fileinfo、ldap、bz2、sodium、imap和swoole PHP模块选项,安装前可通过修改lnmp.conf中的对应选项的值为y开启或安装完成后./addons.sh 进行单独安装。增加了MySQL 5.7、8.0 二进制安装选项;增加了目前最新版的PHP 8.1支持及PHP扩展组件对8.1的支持;lnmp.conf增加了nginx模块ngx_fancyindex安装选项;lnmp管理脚本增加301选项及IPv6开启选项,泛域名SSL证书增加ZeroSSL免费SSL选项及一些安装代码优化。

安装教程:https://lnmp.org/install.html
问题反馈及使用交流论坛:https://bbs.vpser.net/forum-25-1.html
打赏捐赠:https://lnmp.org/donation.html

V1.9正式版更新记录

增加rocky linux 和alma linux支持;
增加PHP 8.1支持;
增加PHP模块exif、fileinfo、ldap、bz2、sodium、imap、swoole和SourceGuardian Loader的支持安装,安装lnmp前lnmp.conf 中开启后安装lnmp或 ./addons.sh 安装以上模块;
增加ngx_fancyindex模块,lnmp.conf中开启后,安装lnmp或升级nginx;
增加nginx模块--with-stream_ssl_preread_module,方便使用stream ssl相关配置;
增加UOS统信桌面家庭版、桌面专业版、服务器版支持;
增加银河麒麟服务器操作系统和桌面系统支持;
增加华为openEuler支持;
增加阿里巴巴龙蜥Anolis OS支持;
增加CentOS Stream 9支持;
增加Alma Linux 9支持;
增加MySQL 5.7、8.0 二进制安装和升级方式;
增加PHP 7.4+ webp支持;
lnmp管理脚本增加HTTP 301跳转HTTPS的选项;
lnmp管理脚本增加是否启用IPv6选项;
移除mariadb 10.1, 10.2增加mariadb 10.5, 10.6;
泛域名SSL增加了ZeroSSL支持;
优化AlibabaCloud支持;
优化部分SSL添加代码;
优化FTP用户添加部分代码;
优化离线安装;
优化部分EOL Linux发行版的安装;
优化OpenSSL支持;
优化RHEL 9系下uw-imap支持情况;
调整MariaDB升级下载地址;
更新诸多软件版本;
其他一些功能优化及调整......