首页 文章 精选 留言 我的

精选列表

搜索[环境],共10000篇文章
优秀的个人博客,低调大师

clumsy 0.3 发布,十年前推出的差网络环境模拟工具

clumsy 0.3 现已发布,距离 v0.1 版本已经过去了十年的时间。clumsy 能在 Windows 平台下人工造成不稳定的网络状况,方便你调试应用程序在极端网络状况下的表现。 0.3 二进制文件与一年半前发布的 0.3 RC4 相同。 将滞后时间上限提高到 15 秒 改用 zig 0.9.0 生成二进制文件 提供 3 个二进制文件,每个文件使用不同的 WinDivert signs 将 iup 和 WinDivert 更新到最新版本 改用 genie 和 msys2 进行构建 带宽模块 添加了 RST。 添加了针对突发数据包丢失的“drop throttled”。 更准确的 chance range。 更新说明:https://github.com/jagt/clumsy/releases/tag/0.3

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

国际化多版本环境如何用 Zadig + Migrate 统一数据和代码变更

作者:楚乔 路特斯(Lotus)运维开发工程师 在国际化多机房部署的场景下,国内生产部署的是最新版本,国外部署的是落后 1 个甚至 N 个迭代的版本。当业务需要在国外升级到指定中间版本时,当前只能靠运维根据现有版本和指定中间版本之间的 N 次发布文档,挨个汇总 SQL 变更内容,非常费时费力,且容易出错。 因为想要自动化整个数据变更流程,所以选用社区比较有名的go-migrate和比较主流的数据库变更工具flyway做相应的尝试,并最终对 go-migrate 做二次开发来实现上述能力。 下面分享我们对这两个方案的验证过程及具体实践,以供社区同学参考。 方案描述 以数据库为单位,建立单独 GitLab 项目管理数据库所有的 SQL 变更,变更范围以版本为单位。 工具选型 工具 go-migrate[1] flyway[2] Github stars 9.6K 6.7K 功能 类似 python flask框架 migrate 功能 undo 等重要功能需要买企业版 版本对比[3] 复杂度 适中 较高 源码 完全开源 有开源版和企业版 多个微服务共用一个数据库 不支持,可简单二开支持 不支持,二开复杂度较高 下面主要介绍 这两个工具的最小 demo 供大家参考。 flyway 前置准备 安装 flyway 从官网下载flyway cli 工具[4] 并安装,选择适合自己电脑操作系统和芯片架构的二进制文件。 准备数据库 使用 Datagrip 工具创建测试数据库用于 demo。 1 create database flyway_test default character set utf8mb4 collate utf8mb4_unicode_ci; 准备项目 创建 spring boot 测试项目 mysql-test ,pom.xml 文件中增加 flyway 依赖。 1<dependencies>2 <dependency>3 <groupId>org.springframework.boot</groupId>4 <artifactId>spring-boot-starter-data-jpa</artifactId>5 </dependency>6 <dependency>7 <groupId>org.flywaydb</groupId>8 <artifactId>flyway-core</artifactId>9 <version>6.0.8</version>10 </dependency>11 <dependency>12 <groupId>mysql</groupId>13 <artifactId>mysql-connector-java</artifactId>14 <scope>runtime</scope>15 </dependency>16</dependencies>17 18<build>19 <plugins>20 <!--flyway-->21 <plugin>22 <groupId>org.flywaydb</groupId>23 <artifactId>flyway-maven-plugin</artifactId>24 <version>6.0.8</version> 25 <!--配置属性-->26 <configuration>27 <user>root</user>28 <password>root</password>29 <url>jdbc:mysql://127.0.0.1:3306/flyway_test</url>30 </configuration>31 </plugin>32 </plugins>33</build> application.yml 文件中增加数据源配置 1spring:2datasource:3 driverClassName: com.mysql.cj.jdbc.Driver4 url: jdbc:mysql://localhost:3306/flyway_test?serverTimezone=UTC&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false5 username: root6 password: root7 # flyway8 flyway:9 baseline-on-migrate: true10 locations: classpath:/db/migration11 check-location: true12 enabled: true13 #jpa14 jpa:15 database: MYSQL16 show-sql: true17 hibernate:18 ddl-auto: none 增加 SQL 变更文件,注意目录为 src/main/resources/db/migration sql 文件命名规则 首位大写字母V ,固定格式; 后面跟上版本号,版本号为数字、点、或者下划线组成; 版本号后跟上__(注意:这里是两位下划线),固定格式; __后跟上文件描述,无限制,最好做到见文知意,如:V2_creatTableStudent.sql 本地验证 本地执行以下命令 1 # 本机 mac 执行2 mvn clean package -U -Dmaven.test.skip=true -e3 ./lotus.sh4 5 2022-08-30 10:15:25.347 INFO TID: N/A 98445 --- [ main][] o.f.core.internal.command.DbMigrate : Current version of schema `flyway_test`: << Empty Schema >>6 2022-08-30 10:15:25.358 INFO TID: N/A 98445 --- [ main][] o.f.core.internal.command.DbMigrate : Migrating schema `flyway_test` to version 1 - init7 2022-08-30 10:15:25.567 INFO TID: N/A 98445 --- [ main][] o.f.core.internal.command.DbMigrate : Migrating schema `flyway_test` to version 2 - create route8 2022-08-30 10:15:25.703 INFO TID: N/A 98445 --- [ main][] o.f.core.internal.command.DbMigrate : Successfully applied 2 migrations to schema `flyway_test` (execution time 00:00.373s)9 2022-08-30 10:15:25.799 INFO TID: N/A 98445 --- [ main][] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]10 2022-08-30 10:15:25.851 INFO TID: N/A 98445 --- [ main][] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.6.7.Final11 2022-08-30 10:15:25.980 INFO TID: N/A 98445 --- [ main][] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}12 2022-08-30 10:15:26.173 INFO TID: N/A 98445 --- [ main][] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL57Dialect13 2022-08-30 10:15:26.311 INFO TID: N/A 98445 --- [ main][] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]14 2022-08-30 10:15:26.319 INFO TID: N/A 98445 --- [ main][] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 执行后数据库 flyway_schema_history 表新增 SQL 变更记录 版本降级 1 mvn flyway:undo2 [ERROR] Failed to execute goal org.flywaydb:flyway-maven-plugin:6.0.8:undo (default-cli) on project redis-test: org.flywaydb.core.internal.license.FlywayProUpgradeRequiredException: Flyway Pro Edition or Flyway Enterprise Edition upgrade required: undo is not supported by Flyway Community Edition. * 很遗憾,flyway 社区版不支持 undo 功能。 在 Zadig 上实践 flyway 参考「Zadig + Flyway 工作流统一数据和代码变更,研发更丝滑」[5] go-migrate 前置准备 安装 migrate 从官方下载migrate 工具[6]并安装 ,选择适合自己电脑操作系统和芯片架构的二进制文件。 准备数据库 使用 Datagrip 工具创建测试数据库用于 demo 1 create database redis_test default character set utf8mb4 collate utf8mb4_unicode_ci; 准备项目 准备 spring boot 测试项目 migration-test,编写 migrate sql 1 # 1_initialize_schema.up.sql2 # 如果是业务表,可以考虑create table if not exists3 create table alert4 ...5 charset = utf8mb4;6 7 create index IX_alert_select_18 ... 1 # 1_initialize_schema.down.sql2 # 如果是业务表,里面有业务数据,建议版本回退的时候不做drop操作3 drop table if exists alert; 将 SQL 变更记录(各版本增量更新的 up、down 语句)保存在项目指定目录下,发布时,执行 migrate up 命令。示例如下: 文件命名规则: 1 {version}_{title}.up.{extension}2 {version}_{title}.down.{extension} 参数说明: {version} —— 64 位无符号整数,该值需要随着版本趋势增长并保持唯一,比如1,2,3,4... {title} —— 本次 SQL 变更的简单英文标识 {extension} —— SQL 变更文件后缀,比如.sql 本地验证 migrate 组件目前对支持多个微服务共用一个数据库,且都需要改变表结构的场景还不完善,可以考虑在原生功能的基础上进行二开,下述内容为二开后的实践。 1. 执行migrate up命令,自动执行所有 up.sql,更新到最新版本 1 shell➜ migrate-test git:(master) ✗ migrate -appname "migrate-test" -source "file://migrations" -database "mysql://root:root@tcp(localhost:3306)/migrate_test" up 2 1/u initialize_schema (180.104ms)3 2/u create_route (276.570667ms)4 3/u create_notify (380.573625ms) 2. 执行migrate down 1命令,回退版本3 1 shell➜ migrate-test git:(master) ✗ migrate -appname "migrate-test" -source "file://migrations" -database "mysql://root:root@tcp(localhost:3306)/migrate_test" down 12 3/d create_notify (39.362042ms) 3. 执行migrate down命令,回退到初始状态 1 shell➜ migrate-test git:(master) ✗ migrate -appname "migrate-test" -source "file://migrations" -database "mysql://root:root@tcp(localhost:3306)/migrate_test" down 2 Are you sure you want to apply all down migrations? [y/N]3 y4 Applying all down migrations5 2/d create_route (73.9035ms)6 1/d initialize_schema (116.148333ms) 4. 执行migrate goto 2命令,更新到指定中间版本2 1 shell➜ migrate-test git:(master) ✗ migrate -appname "migrate-test" -source "file://migrations" -database "mysql://root:root@tcp(localhost:3306)/migrate_test" goto 22 1/u initialize_schema (178.743125ms)3 2/u create_route (280.408375ms) 5. 执行migrate down 1命令,回退版本2 1 shell➜ migrate-test git:(master) ✗ migrate -appname "migrate-test" -source "file://migrations" -database "mysql://root:root@tcp(localhost:3306)/migrate_test" down 12 2/d create_route (52.728416ms) 6. 执行migrate down 1命令,回退版本1 1 shell➜ migrate-test git:(master) ✗ migrate -appname "migrate-test" -source "file://migrations" -database "mysql://root:root@tcp(localhost:3306)/migrate_test" down 12 1/d initialize_schema (56.16175ms) 在 Zadig 上实践 go-migrate 1. 将服务添加到 Zadig 中并创建构建,在构建脚本中添加 migrate 命令及相关参数,将代码中的.sql文件应用到数据库 2. 运行工作流,验证代码中的 SQL 和数据库存在差异时的效果(初次运行将变更应用到数据库,显示变更对应的文件及执行耗时) 再次运行工作流,验证代码中的 SQL 和数据库无差异时的效果(第二次运行,无 SQL 变更,显示no change) 当数据库中的 SQL 版本低于代码中时,migrate up命令会将数据库中的 SQL 更新到和代码一致;当数据库中的 SQL 与代码中一致时,migrate up命令不会执行任何操作。 参考链接 [1]https://github.com/golang-migrate/migrate [2]https://github.com/flyway/flyway [3]https://flywaydb.org/download [4]https://flywaydb.org/download/community [5]https://mp.weixin.qq.com/s/KFyKkYTQp58BpNn9HGA7AQ [6]https://github.com/golang-migrate/migrate/releases Zadig,让工程师更专注创造!

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

【求助帖】在CentOS8环境下用Docker部署Hawkeye出现问题

按照作者文档的部署方法,在Hawkeye目录下执行docker build -t hawkeye .但是报出以下错误:[root@iZ8vb3yphb2x31i6psmb5rZ Hawkeye]# docker build -t hawkeye .Sending build context to Docker daemon 2.441MBStep 1/20 : FROM python:3.7-stretch ---> a6a4ed8843bfStep 2/20 : LABEL MAINTAINER=0xbug ---> Using cache ---> 5c97808edc3fStep 3/20 : ENV TZ=Asia/Shanghai ---> Using cache ---> 9b83d66fd19eStep 4/20 : EXPOSE 80 ---> Using cache ---> 9ec2c382a839Step 5/20 : RUN apt-get update ---> Using cache ---> e34f28b4acdaStep 6/20 : RUN apt-get install --no-install-recommends -y curl gnupg git redis-server supervisor software-properties-common wget ---> Using cache ---> ea86c360bb96Step 7/20 : RUN curl https://openresty.org/package/pubkey.gpg | apt-key add - ---> Using cache ---> 20b1a1b28123Step 8/20 : RUN add-apt-repository -y "deb http://openresty.org/package/debian stretch openresty" ---> Using cache ---> cc147ca17faeStep 9/20 : RUN apt-get update ---> Using cache ---> c89bddff7ab9Step 10/20 : RUN apt-get install -y openresty ---> Using cache ---> c0fb4d1acc3dStep 11/20 : COPY ./deploy /Hawkeye/deploy ---> Using cache ---> 13023d83c77dStep 12/20 : RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r /Hawkeye/deploy/pyenv/requirements.txt -U ---> Running in f687e1308365Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simpleCollecting aniso8601==3.0.2 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/17/13/eecdcc638c0ea3b105ebb62ff4e76914a744ef1b6f308651dbed368c6c01/aniso8601-3.0.2-py2.py3-none-any.whl (22 kB)Collecting certifi==2018.8.24 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/df/f7/04fee6ac349e915b82171f8e23cee63644d83663b34c539f7a09aed18f9e/certifi-2018.8.24-py2.py3-none-any.whl (147 kB)Collecting chardet==3.0.4 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133 kB)Collecting Click==7.0 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81 kB)Collecting Deprecated==1.2.3 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/83/2d/7a5a117eccdef0cdf4cf015830945a7d8fdbbc9ec866d7cead758dc4229c/Deprecated-1.2.3-py2.py3-none-any.whl (8.6 kB)Collecting Flask==1.0.2 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/7f/e7/08578774ed4536d3242b14dacb4696386634607af824ea997202cd0edb4b/Flask-1.0.2-py2.py3-none-any.whl (91 kB)Collecting Flask-RESTful==0.3.6 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/47/08/89cf8594735392cd71752f7cf159fa63765eac3e11b0da4324cdfeaea137/Flask_RESTful-0.3.6-py2.py3-none-any.whl (25 kB)Collecting gunicorn==19.9.0 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/8c/da/b8dd8deb741bff556db53902d4706774c8e1e67265f69528c14c003644e6/gunicorn-19.9.0-py2.py3-none-any.whl (112 kB)Collecting huey==1.10.2 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/0e/9f/7f905b90557a64633bbd64a4dae8e038dbe210a9f8641b81977a6653d84b/huey-1.10.2.tar.gz (311 kB)Collecting idna==2.7 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58 kB)Collecting itsdangerous==0.24 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/dc/b4/a60bcdba945c00f6d608d8975131ab3f25b22f2bcfe1dab221165194b2d4/itsdangerous-0.24.tar.gz (46 kB)Collecting Jinja2==2.10 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl (126 kB)Collecting MarkupSafe==1.0 Downloading https://pypi.tuna.tsinghua.edu.cn/packages/4d/de/32d741db316d8fdb7680822dd37001ef7a448255de9699ab4bfcbdf4172b/MarkupSafe-1.0.tar.gz (14 kB) ERROR: Command errored out with exit status 1: command: /usr/local/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-z45ys48z/MarkupSafe/setup.py'"'"'; __file__='"'"'/tmp/pip-install-z45ys48z/MarkupSafe/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-3chwijex cwd: /tmp/pip-install-z45ys48z/MarkupSafe/ Complete output (5 lines): Traceback (most recent call last): File "<string>", line 1, in <module> File "/tmp/pip-install-z45ys48z/MarkupSafe/setup.py", line 6, in <module> from setuptools import setup, Extension, Feature ImportError: cannot import name 'Feature' from 'setuptools' (/usr/local/lib/python3.7/site-packages/setuptools/__init__.py) ---------------------------------------- ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.WARNING: You are using pip version 20.1; however, version 20.1.1 is available.You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.The command '/bin/sh -c pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r /Hawkeye/deploy/pyenv/requirements.txt -U' returned a non-zero code: 1仔细阅读了一下发现step1默认运行了python3.7版本,而我服务器端安装的是python3.8并且看到这一句 ImportError: cannot import name 'Feature' from 'setuptools' (/usr/local/lib/python3.7/site-packages/setuptools/__init__.py)这分明是去找python3.7的目录了,我检查过我的python3.8目录下是有需要调用的文件的求助应该怎么解决

资源下载

更多资源
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应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册