首页 文章 精选 留言 我的

精选列表

搜索[站点可靠性工程],共5635篇文章
优秀的个人博客,低调大师

现代化静态站点生成器 Astro 发布 2.6,引入中间件 (Middleware)

Astro 2.6 已正式发布。在该版本中,多项实验性功能进入稳定状态,包括:Middleware(中间件)、Hybrid SSR output mode(混合 SSR 输出模式)、Custom client directives(自定义客户端指令)和CSS inlining(CSS 内联)。 此外还引入了许多新功能和改进,包括用于管理重定向的实验性新功能: 重定向(实验性):支持在 Astro 配置中对单个页面设置重定向 改进 Markdoc:Markdoc 现在与 Astro 中的 MDX 具有相同的功能 改进语言工具:升级 Astro VSCode 扩展,由 Volar 提供支持 Middleware(中间件) Middleware 目前已到达稳定阶段。该功能支持在页面被渲染并返回给用户之前或之后运行代码。这为 Astro 项目带来了新的控制层,并解锁了用于身份验证、重定向、修改 header 等新 hook。 // src/middleware.ts export async function onRequest(context, next) { // Do something before the request is handled. const response = await next() // Or, do something before the response is returned. return response } 下面是一个示例,说明如何在 Middleware 中实现基本身份验证检查,并将加载的用户上下文传递到页面路由: // src/middleware.ts // Example: A simple authentication check in middleware. export async function onRequest({ cookies, locals }, next) { // Check for the "sid" user session ID cookie. // Return a 405 (Not Allowed) if the cookie is missing. const sessionId = cookies.get("sid"); if (!sessionId) { return new Response(null, {status: 405}); } // Use your own `getUser()` function to validate the user. // Return a 405 (Not Allowed) if the user isn't real. const user = await getUser(sessionId); if (!user) { return new Response(null, {status: 405}); } // Attach the loaded user to the `locals` object. // Now, it can be read in the page route! locals.user = user; // Return `next()` to return the response. return next(); } CSS 内联 Astro 2.6 引入了一个新的配置选项,可以自动将 CSS 的小片段内联到 HTML 中。这种优化可以通过减少加载页面所需的请求和外部样式表的数量来加速大多数页面(尤其是在首次加载时)。现在可以通过在配置文件中设置inlineStylesheets: "auto"来尝试: // astro.config.mjs import { defineConfig } from "astro/config" export default defineConfig({ build: { inlineStylesheets: "auto", }, }) 改进语言工具 Astro 的语言工具通过@astrojs/language-server的 2.0 版本和 Astro 的 2.0 VSCode 扩展获得了重大升级。此版本完成了对 Volar 的重大重写和内部迁移,以提高性能、功能和稳定性。 详情查看发布公告。

优秀的个人博客,低调大师

你的站点抗压么?推荐一款超方便的开源压测工具

作者:HelloGitHub-Anthony 这里是 HelloGitHub 推出的《讲解开源项目》系列,本期介绍一款标星 17.7k 纯 Go 语言实现的 HTTP(S) 压测工具——vegeta > 项目地址:https://github.com/tsenart/vegeta Vegeta 是一款用 Go 语言编写的多功能 HTTP(S) 压测工具:安装方便、功能齐全、使用简单,还可作为命令行工具或者开发库进行使用。它不仅提供了常见的压测功能,还支持格式化结果并输出为图表或动态显示当前结果。 通过本文你将掌握这款强大压测工具的基本用法,让压测只需一条命令! 一、 安装 从仓库下载编译好的二进制文件: > https://github.com/tsenart/vegeta/releases PC 上下载 amd64 版本即可,在 Mac Os X 上使用 Homebrew 安装: $ brew update && brew install vegeta 如果你会 Go 语言,使用 get 自动安装: $ go get -u github.com/tsenart/vegeta > 如提示找不到指令,请确保 go 以及 GOBIN 在您的环境变量中 二、快速入门 > 以下指令均可以在 Linux 下运行 对于下载编译好的用户建议先将 vegeta 临时添加到 PATH 路径,方便使用: $ cd vegeta $ export PATH=$pwd:$PATH 或者直接将 vegeta 放到 bin 目录下: $ cd vegeta $ sudo mv vegeta /usr/local/bin/ 输入 vegeta -version 后可以显示证明安装成功。 首次使用可以使用: $ vegeta --help 来查看支持的指令和相关例子。 1. 使用例子 在命令行输入: $ echo "GET http://127.0.0.1:233"| vegeta attack -rate=500 -connections=1 -duration=1s | tee results.bin | vegeta report 将会得到如图所示的结果: 这条指令前半部分的 echo "GET http://127.0.0.1:233" 表示想要测试的地址,这里我使用的是 nginx 搭建的本地服务器,vegeta attack 代表测试指令,其后 -rate -connections -duration 分别表示每秒钟请求次数、每个地址最大连接数、持续时间。 攻击完成后使用 tee results.bin 保存测试报告并用 veteta report 显示报告内容。 vegeta report 也支持使用 文本、JSON、直方图、hdrplot 等: $ echo "GET http://127.0.0.1:233"| vegeta attack -rate=500 -connections=1 -duration=5s > results.bin 文本(默认情况) $ vegeta report results.bin 直方图 $ vegeta report -type='hist[0,1ms,2ms,3ms,4ms]' results.bin JSON $ vegeta report --type json results.bin hdrplot $ vegeta report --type hdrplot results.bin 2.生成图形 接上一小节的内容,我们将文字形式的报告转为图表显示,在命令行中输入: $ vegeta plot --title HelloGitHub results.bin > plot.html 在浏览器中打开新生成的 plot.html,即可看到图形化的测试数据: 其中 --title HelloGitHub 用来设置表头文字。此外还有 -cpu 用来设置默认使用的 cpu 核心数量,这里我默认是 12。可以使用 --threshold flag 设定下采样阈值。 > vegeta plot 也可以将多个曲线放在一起,使用 vegeta plot result_1.bin result2_.bin ... result_n.bin > plot.html 即可 此外,配合 Go 下的 jaggr 和 jplot 可以实现动态画面输出,官方给出的指令和效果如下: $ echo 'GET http://localhost:8080' | \ vegeta attack -rate 5000 -duration 10m | vegeta encode | \ jaggr @count=rps \ hist\[100,200,300,400,500\]:code \ p25,p50,p95:latency \ sum:bytes_in \ sum:bytes_out | \ jplot rps+code.hist.100+code.hist.200+code.hist.300+code.hist.400+code.hist.500 \ latency.p95+latency.p50+latency.p25 \ bytes_in.sum+bytes_out.sum > 由于 jplot 需要 iTerm2 但笔者没有苹果系列的电脑所以关于动态输出部分的内容大家需要自己研究。 3.使用管道 如果您了解 Shell 的管道那就不难看出,前文代码中就是使用管道将 echo "GET http:// xxx" 的输出内容传给了 vegeta。通过管道,除了使用简单的 echo 工具,也可以使用其他任何程序的输出作为测试目标。 4.转换编码 vegeta 同样提供了编码转换功能,现在支持三种编码格式:Gob (二进制)、CSV 以及 JSON(默认) 使用 veget encode 可以做到这几种编码的相互转换: $ echo "GET http://127.0.0.1:233"| vegeta attack -rate=500 -connections=1 -duration=1s > results.gob $ cat results.gob | vegeta encode | jq . 可以显示转换为 JSON 格式的测试信息,或者: $ cat results.gob | vegeta encode --to csv --output results.csv > 输入格式的检测是自动完成的,不需要手动进行设置。 三、结语 到这里 vegeta 的基本使用到这里就结束了,它还支持一些精细参数的设置比如证书、密钥等,但限于篇幅和笔者知识水平限制无法扩展太多,大家可以根据需要的使用 vegeta [command] --help 指令进行查看,也可以阅读官方的使用手册 > 项目地址:https://github.com/tsenart/vegeta 温馨提示:压测虽好玩但不要贪杯哦,别压起劲儿来把线上服务给压挂了! 关注 HelloGitHub 公众号 第一时间收到更新。 还有更多开源项目的介绍和宝藏项目等待你的发现。

优秀的个人博客,低调大师

如何使用被信任的证书来配置SLB HTTPS协议,使slb站点支持ssl

阿里云的SLB已经原生支持HTTPS协议了,不用在像之前那样配置TCP协议的443来实现,支持的方式也是将证书托管到SLB服务器上去。这里的可以使用自签名的不信任证书,也可使用CA认证的可信证书。这里我们使用免费的ssl证书来测试一下。 首先需要到一些证书颁发机构去申请操作系统信任的证书,这类证书一般都是需要按时间进行付费。这里我们使用一家免费证书来测试,申请过程也比较简单,我们申请一个ok.cnhejia.cn域名的证书(一个证书可以对应多个域名或者泛域名 ) 请完毕后会给出证书下载连接,这里我们主要使用证书usrer.crt以及私钥user.key,在SLB控制台新建证书时,将对应的文件内容,copy到slb控制台的对应位置即可。 配置完毕后,开始配置HTTPS协议的SLB监控配置,这里前端是HTTPS时,后端服务器只能是HTTP的。 配置完毕后,访问测试,如果访问的域名和证书不匹配,浏览器一般会给出警示。 如果证书检测合法,浏览器一般会给出安全的提示:

优秀的个人博客,低调大师

uwsgi django nginx多站点 pyvenv virutalvenv python 3 django 2这些限制下,如何让uws...

之前正式环境是跑的uwsgi,这次升级之后, 以前的nginx和uwsgi的配置都过时而不可用了。 我们需要的是通过二级目录访问,而不能用根目录, 因为根目录用于整体工具的网页导航。 这次重新搜索了文档,让相关的多应用再跑起来了。 uwsgi版本: 2.0.15 ====================之前的nginx和uwsgi配置=====python2.7 django1.8============== upstream xxx_host { server ip:host; } server { listen 80; server_name localhost; location /xxx/ { include uwsgi_params; uwsgi_pass xxx_host; uwsgi_param SCRIPT_NAME /xxx; uwsgi_modifier1 30; #此行加上面,进行丑陋patch index index.html index.htm; client_max_body_size 1000m; client_body_timeout 5m; proxy_connect_timeout 5m; proxy_read_timeout 5m; proxy_send_timeout 5m; } location ^~ /xxx/static { alias /xx/xx/static; } } [uwsgi] socket = ip:9090 chdir = /xxx/xx/xx/xx module = settings.wsgi #(定位wsgi目录及文件,结合上面的chdir) master = true vhost = true no-stie = true workers = 4 reload-mercy = 10 vacuum = true max-requests = 1000 limit-as = 512 buffer-sizi = 30000 pidfile = /var/log/xxx/uwsgi9090.pid daemonize = /var/log/xxx/uwsgi9090.log listen=1024 ====================现在的nginx和uwsgi配置=====python3.6 django2.0============== upstream xxx_host { server ip:9090; } server { listen 80; server_name localhost; location /xxx/ { include uwsgi_params; uwsgi_pass xxx_host; client_max_body_size 1000m; client_body_timeout 5m; proxy_connect_timeout 5m; proxy_read_timeout 5m; proxy_send_timeout 5m; } location ^~ /xxx/static { alias /xx/xxxx/xxstatic; } } [uwsgi] socket = ip:9090 mount = /xxx=/xxx/xx/xxxx/settings/wsgi.py manage-script-name = true # 此行加上行定位,比前面优雅 master = true vhost = true no-stie = true workers = 4 reload-mercy = 10 vacuum = true max-requests = 1000 limit-as = 512 buffer-sizi = 30000 pidfile = /var/log/xxx/uwsgi9090.pid daemonize = /var/logxxx/uwsgi9090.log listen=1024 再来一个uwsgi系统服务启停命令的脚本: #! /bin/sh # chkconfig: 2345 55 25 # Description: Startup script for uwsgi webserver on Debian. Place in /etc/init.d and # run 'update-rc.d -f uwsgi defaults', or use the appropriate command on your # distro. For CentOS/Redhat run: 'chkconfig --add uwsgi' ### BEGIN INIT INFO # Provides: uwsgi # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the uwsgi web server # Description: starts uwsgi using start-stop-daemon ### END INIT INFO # Author: licess # website: http://lnmp.org PATH=/usr/local/venv_py3/bin DESC="uwsgi daemon" NAME=uwsgi9090 DAEMON=/root/xxx/venv_py3/bin/uwsgi CONFIGFILE=/root/xxx/xxx/$NAME.ini PIDFILE=/var/log/prism/$NAME.pid SCRIPTNAME=/root/xxx/$NAME set -e [ -x "$DAEMON" ] || exit 0 do_start() { $DAEMON $CONFIGFILE || echo -n "uwsgi already running" } do_stop() { $DAEMON --stop $PIDFILE || echo -n "uwsgi not running" rm -f $PIDFILE echo "$DAEMON STOPED." } do_reload() { $DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload" } do_status() { ps aux|grep $DAEMON } case "$1" in status) echo -en "Status $NAME: \n" do_status ;; start) echo -en "Starting $NAME: \n" do_start ;; stop) echo -en "Stopping $NAME: \n" do_stop ;; reload|graceful) echo -en "Reloading $NAME: \n" do_reload ;; *) echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2 exit 3 ;; esac exit 0 uwsgi9090

优秀的个人博客,低调大师

多院区公共机构托管项目:MyEMS 跨站点数据聚合与统一可视化实现

随着公共机构节能降碳工作的深入推进,能源费用托管模式已成为公共机构节能改造的主流路径。截至目前,全国公共机构累计实施能源费用托管项目突破 1200 个,合同总金额超过 550 亿元,覆盖 7000 余家公共机构。在这一浪潮中,一个日益普遍的场景是:托管服务商同时承接多个院区、多个机构的能源托管合同,形成"一对多"的运营格局。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册