Объединение графики и текста: План построения кластера GreatSQL MGR + ProxySQL

Предисловие

ПроксиSQL

ProxySQL — это промежуточный продукт с открытым исходным кодом, основанный на MySQL. Это гибкий прокси-уровень MySQL, который может реализовать разделение чтения и записи, поддерживает функцию маршрутизации запросов, поддерживает динамическое указание SQL для кэширования и поддерживает динамическую загрузку (без перезапуска службы ProxySQL). ), аварийное переключение и некоторые возможности фильтрации SQL.

Великий SQL MGR

GreatSQLЭто внутренняя независимая база данных с открытым исходным кодом, подходящая для приложений финансового уровня. Она имеет множество основных функций, таких как высокая производительность, высокая надежность, простота использования и высокая безопасность. Ее можно использовать в качестве дополнительной замены MySQL или Percona Server. и используется в онлайн-производственных средах. Он совершенно бесплатен и совместим с MySQL или Percona Server.

GreatSQLОсновным улучшением высокой надежности является внесение множества улучшений и улучшений в MGR для дальнейшего повышения уровня высокой надежности MGR. Включая, помимо прочего, следующие улучшения:

  1. 地理标签, повысить надежность данных в архитектуре многокомпьютерного зала.
  2. 读写节点动态VIP, переключение высокой доступности более удобно.
  3. 仲裁节点, обеспечивая более высокую доступность при меньших затратах на сервер.
  4. 快速单主模式, быстрее и выше производительность в режиме одного мастера.
  5. 智能选主, механизм выбора мастера переключения высокой доступности является более разумным.
  6. 全新流控算法, что делает транзакции более стабильными и позволяет избежать резких колебаний.
  7. Оптимизирована проблема, которая может вызывать серьезные колебания производительности при присоединении и выходе узлов.
  8. Решите проблему, связанную с блокировкой кластера MGR при заполнении дискового пространства.
  9. Решена проблема невозможности выбора лидера из-за длинных транзакций.
  10. Оптимизируйте алгоритм очистки очереди аутентификации транзакций, чтобы избежать проблемы дрожания каждые 60 секунд.
  11. Исправлена ​​проблема длительного ожидания во время процесса восстановления.

Для получения более подробной информации перейдите по ссылке ➥ https://gitee.com/GreatSQL/GreatSQL-Manual/blob/master/5-enhance/5-2-ha.md .

Введение в среду развертывания

Схема архитектуры развертывания

файл

Кластер GreatSQL MGR реализует функцию репликации базы данных и высокую доступность. Proxysql обеспечивает доступ к приложениям, разделяет чтение и запись в кластере MGR, определяет состояние кластера и реализует аварийное переключение.

Конфигурация среды развертывания

Подробности программного обеспечения для развертывания

Название программного обеспечения номер версии
ГрейтСкл 8.0.32-24
ПроксиSQL 2.5.4-58

Подготовка среды развертывания

На этот раз мы используем метод развертывания нескольких экземпляров на одном компьютере. Как развернуть многоэкземплярный компьютер на одном компьютере, можно перейти по ссылке ➥ https://gitee.com/GreatSQL/GreatSQL-Manual/blob/master/6-oper- руководство/6-6-multi-instances.md

ИП порт Роль
172.17.139.77 3306 МГР01
172.17.139.77 3307 МГР02
172.17.139.77 6032、6033 ПроксиSQL
$ cat /etc/system-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
$ uname -a
Linux gip 3.10.0-1160.el7.x86_64 #1 SMP Tue Aug 18 14:50:17 EDT 2020 x86_64 x86_64 x86_64 GNU/Linux

Конфигурация GreatSQL

#mgr settings
loose-plugin_load_add = 'mysql_clone.so'
loose-plugin_load_add = 'group_replication.so'
loose-group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa1"
loose-group_replication_group_seeds = '172.17.139.77:33061,172.17.139.77:33071'
loose-group_replication_start_on_boot = ON
loose-group_replication_bootstrap_group = OFF
loose-group_replication_exit_state_action = READ_ONLY
loose-group_replication_flow_control_mode = "DISABLED"
loose-group_replication_single_primary_mode = ON
loose-group_replication_communication_max_message_size = 10M
loose-group_replication_transaction_size_limit = 3G
loose-group_replication_arbitrator = 0
loose-group_replication_single_primary_fast_mode = 0
loose-group_replication_request_time_threshold = 20000
report_host = "172.17.139.77"

Конфигурация узла MGR01 следующая.

[mysqld@mgr01]
datadir=/data/GreatSQL/mgr01
socket=/data/GreatSQL/mgr01/mysql.sock
port=3306
server_id=103306
log-error=/data/GreatSQL/mgr01/error.log
loose-group_replication_local_address= "172.17.139.77:33061"

Конфигурация узла MGR02 следующая.

[mysqld@mgr02]
datadir=/data/GreatSQL/mgr02
socket=/data/GreatSQL/mgr02/mysql.sock
port=3307
server_id=103317
log-error=/data/GreatSQL/mgr02/error.log
loose-group_replication_local_address= "172.17.139.77:33071"

Создайте кластер MGR и ProxySQL.

Создайте кластер GreatSQL MGR.

Операция экземпляра MGR01

greatsql> set session sql_log_bin=0;
greatsql> create user 'repl'@'%' identified with mysql_native_password by 'GreatSQL@666';
greatsql> GRANT BACKUP_ADMIN, REPLICATION SLAVE ON *.* TO `repl`@`%`;
greatsql> set session sql_log_bin=1;
greatsql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='GreatSQL@666' FOR CHANNEL 'group_replication_recovery';

Далее можно запустить кластер MGR.

greatsql> set global group_replication_bootstrap_group=ON;
greatsql> start group_replication;
greatsql> select * from performance_schema.replication_group_members\G
*************************** 1. row ***************************
              CHANNEL_NAME: group_replication_applier
                 MEMBER_ID: 2920447e-35bf-11ee-89a5-00163e566da1
               MEMBER_HOST: 172.17.139.77
               MEMBER_PORT: 3306
              MEMBER_STATE: ONLINE
               MEMBER_ROLE: PRIMARY
            MEMBER_VERSION: 8.0.32
MEMBER_COMMUNICATION_STACK: XCom

Операция экземпляра MGR02

greatsql> set session sql_log_bin=0;
greatsql> create user 'repl'@'%' identified with mysql_native_password by 'GreatSQL@666';
greatsql> GRANT BACKUP_ADMIN, REPLICATION SLAVE ON *.* TO `repl`@`%`;
greatsql> set session sql_log_bin=1;
greatsql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='GreatSQL@666' FOR CHANNEL 'group_replication_recovery';
greatsql> start group_replication;
Query OK, 0 rows affected (5.39 sec)

Кластер MGR успешно создан

greatsql> select * from performance_schema.replication_group_members\G
*************************** 1. row ***************************
              CHANNEL_NAME: group_replication_applier
                 MEMBER_ID: 8f20696c-3b46-11ee-b59e-00163e566da1
               MEMBER_HOST: 172.17.139.77
               MEMBER_PORT: 3306
              MEMBER_STATE: ONLINE
               MEMBER_ROLE: PRIMARY
            MEMBER_VERSION: 8.0.32
MEMBER_COMMUNICATION_STACK: XCom
*************************** 2. row ***************************
              CHANNEL_NAME: group_replication_applier
                 MEMBER_ID: 8ff26a55-3b46-11ee-bd70-00163e566da1
               MEMBER_HOST: 172.17.139.77
               MEMBER_PORT: 3307
              MEMBER_STATE: ONLINE
               MEMBER_ROLE: SECONDARY
            MEMBER_VERSION: 8.0.32
MEMBER_COMMUNICATION_STACK: XCom

Создайте учетные записи, необходимые для ProxySQL, в кластере MGR.

# proxysql的监控账户
greatsql> create user 'monitor'@'%' identified with mysql_native_password by 'Monitor@666';
greatsql> grant all privileges on *.* to 'monitor'@'%' with grant option;
# proxysql的对外访问账户
greatsql> create user 'proxysql'@'%' identified with mysql_native_password by 'Proxysql@666';
greatsql> grant all privileges on *.* to 'proxysql'@'%' with grant option;

Метод аутентификации пользователя необходимо изменить наmysql_native_password

Проверьте, успешно ли он создан

greatsql> select User,Host from mysql.user;
+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| monitor          | %         |
| proxysql         | %         |
| repl             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

УстановитьПроксиSQL

Подробные инструкции по установке есть в документации ProxySQL ➥ https://github.com/sysown/proxysql.

Можно установить как методы RPM, так и yum. В этой статье для установки используется метод RPM. Если вы хотите использовать для установки yum, вам необходимо изменить источник yum.

$ cat > /etc/yum.repos.d/proxysql.repo << EOF
[proxysql]
name=ProxySQL YUM repository
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/centos/\$releasever
gpgcheck=1
gpgkey=https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/repo_pub_key
EOF

Систему Red Hat необходимо \$releaseverизменить на7

Затем установите его напрямую

$ yum install proxysql

Здесь следует отметить, что если GreatSQL установлен с использованием RPM, он будет конфликтовать с зависимостями, необходимыми ProxySQL!

Адрес загрузки пакета RPM: https://github.com/sysown/proxysql/releases/tag/v2.5.4 .

Поэтому используйте опцию RPM --nodepsдля принудительной установки.rpm -ivh proxysql-2.5.4-1-centos7.x86_64.rpm --nodeps

Но systemctl start proxysql.serviceпри запуске будет сообщаться об ошибке.libgnutls.so.28

Установите его еще раз в это время, и вы сможете запустить его yum install -y gnutlsснова.systemctl start proxysql.service

Запустить проксиSQL

$ systemctl start proxysql
# 检查是否启动成功
$ systemctl status proxysql

Проверьте, открыт ли порт

$ netstat -anlp | grep proxysql
tcp  0  0 0.0.0.0:6033  0.0.0.0:*  LISTEN 1009915/proxysql    
tcp  0  0 0.0.0.0:6032  0.0.0.0:*  LISTEN 1009915/proxysql  
  • 6032 — номер порта управления ProxySQL.
  • 6033 — номер порта для внешних сервисов.

По умолчанию имя пользователя и пароль ProxySQL — admin.

Настроить проксиSQL

Вход администратора

$ mysql -uadmin -padmin -h 127.0.0.1 -P 6032

Вы можете видеть, что доступно несколько баз данных, и ProxySQL преобразует SHOW DATABASEкоманды в эквивалентные команды для SQLite3.

greatsql> show databases;
+-----+---------------+-------------------------------------+
| seq | name          | file                                |
+-----+---------------+-------------------------------------+
| 0   | main          |                                     |
| 2   | disk          | /var/lib/proxysql/proxysql.db       |
| 3   | stats         |                                     |
| 4   | monitor       |                                     |
| 5   | stats_history | /var/lib/proxysql/proxysql_stats.db |
+-----+---------------+-------------------------------------+
5 rows in set (0.00 sec)

Эти базы данных функционируют следующим образом:

  • main: База данных конфигурации в памяти. Используя эту базу данных, конфигурацию ProxySQL можно легко запрашивать и обновлять в автоматическом режиме. Используя LOAD MYSQL USERS FROM MEMORY и подобные команды, хранимая здесь конфигурация может быть распространена во время выполнения на структуры данных в памяти, используемые ProxySQL.

  • disk: «Основной» образ диска. «main» не сохраняется при перезагрузках и может быть загружен из базы данных «на диске» или файла конфигурации, в зависимости от флагов загрузки и наличия базы данных на диске.

  • stats: Содержит метрики времени выполнения, собранные из внутренних функций агента. Примеры показателей включают количество совпадений каждого правила запроса, текущий выполняющийся запрос и т. д.

  • monitor: Содержит индикаторы мониторинга, относящиеся к внутреннему серверу, подключенному к ProxySQL. Примеры показателей включают минимальное и максимальное время подключения к внутреннему серверу или проверки связи с ним.

  • myhgm: включено только в отладочных сборках

Кроме того, оба типа пользователей получают доступ к базе данных администрирования, используя следующие учетные данные по умолчанию:

  • пользователь:admin/пароль:admin — имеет доступ на чтение и запись ко всем таблицам.

  • user:stats/password:stats — имеет доступ только для чтения к таблице статистики. Это используется для получения метрик из ProxySQL, не раскрывая слишком большую часть базы данных.

Вышеупомянутые учетные данные доступа можно настроить с помощью переменных admin-admin_credentialsи .admin-stats_credentials

Для более подробной информации перейдите в раздел «Промежуточное программное обеспечение MySQL-ProxySQL Laoye Tea House (1) [Добавить в WeChat]» «Промежуточное программное обеспечение MySQL-ProxySQL Laoye Tea House (2) [Добавить в WeChat]»

Чтобы настроить учетную запись мониторинга

greatsql> set mysql-monitor_username='monitor';
greatsql> set mysql-monitor_password='Monitor@666';

Два приведенных выше предложения представляют собой способы изменения переменных. Их также можно изменить с помощью операторов sql в основной библиотеке.

greatsql>UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
greatsql>UPDATE global_variables SET variable_value='Monitor@666' WHERE variable_name='mysql-monitor_password';

Настройка информации о группе по умолчанию

greatsql> insert into mysql_group_replication_hostgroups(writer_hostgroup,backup_writer_hostgroup,reader_hostgroup,offline_hostgroup,active,writer_is_also_reader)values(10,20,30,40,1,1);

Этот оператор SQL используется для настройки разделения активного и резервного кластера MGR, а также разделения чтения и записи. mysql_group_replication_hostgroupsВставьте конфигурацию в таблицу.

  • writer_hostgroup:Запишите группу хостов главного узла (должно быть больше 0), здесь установите значение 10.
  • backup_writer_hostgroup:Бэкап записывается в группу хостов мастер-ноды, здесь она 20.
  • reader_hostgroup:Группа хостов узла, доступного только для чтения, здесь равна 30.
  • offline_hostgroup:Группа хостов автономного узла — 40.
  • active: активировать ли эту конфигурацию, 1 означает активацию.
  • writer_is_also_reader:Можно ли использовать главный узел записи в качестве узла чтения, 1 означает да.

Настройте пользователей внешнего доступа для записи в группу 10.

greatsql> insert into mysql_users(username,password,default_hostgroup)values('proxysql','Proxysql@666',10);

Функция этого кода SQL заключается в добавлении узла сервера MySQL к управлению ProxySQL, чтобы ProxySQL мог распределять запросы на подключение в соответствии с определенными правилами и политиками для достижения балансировки нагрузки и высокой доступности.

Настройте главный узел как группу записи 10, а подчиненный узел — как группу только для чтения 30.

greatsql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)values (10,'172.17.139.77',3306,1,3000,10,'mgr01');
greatsql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)values (30,'172.17.139.77',3306,2,3000,10,'mgr01');
greatsql> insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)values (30,'172.17.139.77',3307,2,3000,10,'mgr02');
  • hostgroup_id: Укажите группу хостов, к которой он принадлежит.Это концепция, используемая для управления группами в ProxySQL. Здесь установлено значение 10.
  • hostname: укажите имя хоста или IP-адрес сервера MySQL, здесь это «172.17.139.77».
  • port: Укажите номер порта сервера MySQL, здесь он 3306.
  • weight: укажите вес узла при балансировке нагрузки. Чем выше вес, тем больше запросов будет назначено этому узлу. Это установлено на 1.
  • max_connections: указывает максимальное количество соединений, разрешенных этим узлом.
  • max_replication_lag: указывает максимальную задержку репликации (в секундах), настраиваемую при подключении к узлу главной-подчиненной реплики.
  • comment: необязательный комментарий или описание, здесь установлено значение «mgr01».

Функция этого кода SQL — добавить пользователя MySQL к управлению ProxySQL, чтобы ProxySQL мог контролировать доступ пользователей к базе данных в соответствии с определенными правилами и политиками доступа пользователей, включая маршрутизацию, балансировку нагрузки, аварийное переключение и т. д.

Настройте параметры разделения чтения и записи, к ним относятся две таблицы mysql_query_rules, и mysql_query_rules_fast_routingвы можете настроить их самостоятельно здесь.

где таблица mysql_query_rules_fast_routingявляется mysql_query_rulesрасширением, а политики и свойства быстрой маршрутизации оцениваются позже (доступно только в ProxySQL 1.4.7+).

greatsql> insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(1,1,^SELECT.*FORUPDATE$,10,1);
greatsql> insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (2,1,'^select',30,1);
  • active: включить ли это правило, 1 означает включено, 0 означает отключено.
  • match_patternПоля представляют собой правила настройки
  • destination_hostgroupПоле представляет указанную по умолчанию группировку,
  • applyПредставляет фактическое выполнение правил приложения.

В ProxySQL rule_idфункция сортировки предназначена для управления порядком соответствия правил. Когда ProxySQL обрабатывает запрос, он будет rule_idсопоставлять правила одно за другим в порядке возрастания, пока не будет найдено первое подходящее правило. Как только соответствующее правило будет найдено, ProxySQL обработает запрос в соответствии с определением правила. Целью такого упорядочения является обеспечение соответствия и применения правил в ожидаемом порядке, что обеспечивает точную маршрутизацию запросов, разгрузку и балансировку нагрузки.

В приведенном выше примере select ... for updateправило заключается в том, чтобы гарантировать, что оно rule_idменьше обычного selectправила rule_id, чтобы гарантировать, что сначала будет сопоставлено правило select ... for update, а не обычное selectправило.

Поскольку select ... for updateэто специальный запрос, во время его выполнения будут выполняться операции блокировки, что может повлиять на выполнение других запросов. Уменьшив select ... for updateразмер rule_id, вы можете гарантировать, что ProxySQL будет отдавать приоритет сопоставлению с этим специальным правилом при сопоставлении с правилами запроса, чтобы select ... for updateсоответствующая логика маршрутизации и обработки могла применяться более точно во время обработки.

save заставляет данные памяти постоянно храниться на диске, а load заставляет данные памяти загружаться в среду выполнения, чтобы они вступили в силу:

greatsql> save mysql users to disk;
greatsql> save mysql servers to disk;
greatsql> save mysql query rules to disk;
greatsql> save mysql variables to disk;
greatsql> save admin variables to disk;
greatsql> load mysql users to runtime;
greatsql> load mysql servers to runtime;
greatsql> load mysql query rules to runtime;
greatsql> load mysql variables to runtime;
greatsql> load admin variables to runtime;

После завершения загрузки вы можете использовать select *, чтобы узнать, верна ли информация каждого набора таблиц.

Проверьте информацию мониторинга.Все индикаторы модуля мониторинга ProxySQL сохраняются в monitor库的log表中. Ниже приводится мониторинг нормального соединения.Для мониторинга индикатора подключения может быть много ошибок подключения в передней части.Это потому, что там это ошибка, когда информация мониторинга не настроена. После настройки, если ошибка подключения. Если результат равен NULL, это означает нормальное состояние.

greatsql> select * from monitor.mysql_server_connect_log;
+---------------+------+------------------+-------------------------+---------------+
| hostname      | port | time_start_us    | connect_success_time_us | connect_error |
+---------------+------+------------------+-------------------------+---------------+
| 172.17.139.77 | 3307 | 1692152694528579 | 2347                    | NULL          |
| 172.17.139.77 | 3306 | 1692152695231434 | 3131                    | NULL          |
+---------------+------+------------------+-------------------------+---------------+
#只截取部分

Мониторинг информации о сердцебиении (мониторинг показателей пинга)

greatsql> select * from mysql_server_ping_log limit 10;
+---------------+------+------------------+----------------------+------------+
| hostname      | port | time_start_us    | ping_success_time_us | ping_error |
+---------------+------+------------------+----------------------+------------+
| 172.17.139.77 | 3306 | 1692152694511424 | 132                  | NULL       |
| 172.17.139.77 | 3307 | 1692152694511498 | 125                  | NULL       |
+---------------+------+------------------+----------------------+------------+
#只截取部分

Тестирование разделения чтения и записи

Подключитесь через proxysql, чтобы проверить, направляется ли операция чтения в группу чтения.

$ mysql -uproxysql -pProxysql@666 -P 6033 -h 172.17.139.77 -e "select @@server_id;"
+-------------+
| @@server_id |
+-------------+
|      103317 |
+-------------+
#可以看到已经把路由分配给了读组

Тестовая операция записи

greatsql> begin;
Query OK, 0 rows affected (0.00 sec)
greatsql> select User from mysql.user for update;
+------------------+
| User             |
+------------------+
| monitor          |
| proxysql         |
| repl             |
| mysql.infoschema |
| mysql.session    |
| mysql.sys        |
| root             |
+------------------+
7 rows in set (0.00 sec)
greatsql> select @@server_id;
+-------------+
| @@server_id |
+-------------+
|      103306 |
+-------------+
1 row in set (0.00 sec)
#可以看到已经把路由分配给了写组
greatsql> commit;
Query OK, 0 rows affected (0.00 sec)

Если вы хотите просмотреть информацию о маршрутизации SQL-запросов в ProxySQLstats_mysql_query_digest

greatsql> select hostgroup,schemaname,username,digest_text,count_star from  stats_mysql_query_digest;
+-----------+--------------------+----------+----------------------------------------+------------+
| hostgroup | schemaname         | username | digest_text                            | count_star |
+-----------+--------------------+----------+----------------------------------------+------------+
| 10        | information_schema | proxysql | commit                                 | 1          |
| 10        | information_schema | proxysql | select User from mysql.user for update | 1          |
| 10        | information_schema | proxysql | select * from beta1 for update         | 2          |
| 10        | information_schema | proxysql | begin                                  | 1          |
| 30        | information_schema | proxysql | select @@server_id                     | 2          |
+-----------+--------------------+----------+----------------------------------------+------------+
#只截取部分
  • count_startПодсчитайте количество операторов SQL и проанализируйте, какие операторы SQL выполняются чаще всего.

На данный момент развернуто решение для построения кластера GreatSQL MGR + ProxySQL.

конец

Хотя ProxySQL обладает мощными функциями, ProxySQL официально не является нативным, и его взаимодействие с MGR не такое гладкое, как у GreatSQL-MySQL-Router.Например, необходимо создавать дополнительные хранимые процедуры для отслеживания изменений в MGR. Кроме того, в ProxySQL на самом деле довольно много ошибок.Конечно, если объем бизнеса невелик, а также для учебных или экспериментальных целей, также можно выбрать ProxySQL.

Рекомендуется использовать GreatSQL-MySQL-Router, сотрудничество с GreatSQL MGR становится более плавным и совместимым.

Используйте GreatSQL-MySQL-Routerкластер MGR для создания решения разделения чтения и записи: https://gitee.com/GreatSQL/GreatSQL-Manual/blob/master/6-oper-guide/6-3-oper-rw-splitting.md


Наслаждайтесь GreatSQL :)

О GreatSQL

GreatSQL — это внутренняя независимая база данных с открытым исходным кодом, подходящая для приложений финансового уровня. Она имеет множество основных функций, таких как высокая производительность, высокая надежность, простота использования и высокая безопасность. Ее можно использовать в качестве дополнительной замены MySQL или Percona Server. и используется в онлайн-производственной среде, совершенно бесплатно и совместимо с MySQL или Percona Server.

Ссылки по теме: Сообщество GreatSQL Gitee GitHub Bilibili

Сообщество GreatSQL:

изображение

Предложения и отзывы сообщества о наградах: https://greatsql.cn/thread-54-1-1.html .

Подробности о заявках, получивших награды в блоге сообщества: https://greatsql.cn/thread-100-1-1.html .

(Если у вас есть какие-либо вопросы по статье или у вас есть уникальные идеи, вы можете зайти на официальный сайт сообщества, чтобы задать их или поделиться ими~)

Группа технического обмена:

Группа WeChat и QQ:

Группа QQ: 533341697

Группа WeChat: добавьте помощника сообщества GreatSQL (идентификатор WeChat:) wanlidbcв друзья и подождите, пока помощник сообщества добавит вас в группу.

JetBrains выпускает Rust IDE: RustRover Java 21 / JDK 21 (LTS) GA Учитывая такое количество разработчиков Java в Китае, должна появиться среда разработки приложений экологического уровня .NET 8. Производительность значительно улучшена и намного опережает .NET 8. NET 7. PostgreSQL 16 выпущен бывшим членом команды Rust, о котором я глубоко сожалею и попросил удалить мое имя. Вчера я завершил удаление Nue JS из внешнего интерфейса. Автор сказал, что я создам новую веб-экосистему. NetEase Fuxi отреагировала на смерть сотрудника, которому «угрожал отдел кадров из-за ОШИБКИ».Жэнь Чжэнфэй: Мы приближаемся к четвертой промышленной революции, Apple — учитель Huawei, новый продукт Vercel «v0»: генерировать код интерфейса пользовательского интерфейса на основе текст
{{o.name}}
{{м.имя}}

рекомендация

отmy.oschina.net/GreatSQL/blog/10112045