正在优化从云 运行 服务到 GCP mysql 的连接?
Optimizing connection to GCP mysql from cloud run service?
我在云 运行 上有一个 spring 启动应用程序 运行ning,到目前为止我只需要添加 spring 云 gcp mysql
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
<version>1.2.8.RELEASE</version>
</dependency>
我的 POM 中的依赖项,并配置我的 application.yml 文件以设置数据库名称、连接名称等,它 运行 在本地和云上都很好 [=71=]。
我的application.yml:
spring:
cloud:
gcp:
sql:
enabled: true
database-name: pos_database
instance-connection-name: pos-sys:asia-southeast2:pos-server-database
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: ***
password: ***
hikari:
maximum-pool-size: 20
但是我意识到冷启动性能受到了影响,因为在启动时套接字工厂通过 SSL 套接字连接到数据库实例:
2021-05-31 13:10:07.152 INFO 1539 --- [onnection adder] c.g.cloud.sql.core.CoreSocketFactory :
Connecting to Cloud SQL instance [pos-sys:asia-southeast2:owl-server-database] via SSL socket.
我收到一堆重复的台词
2021-05-31 13:10:09.461 INFO 1539 --- [connection adder] c.g.cloud.sql.core.CoreSocketFactory :
Connecting to Cloud SQL instance [pos-sys:asia-southeast2:pos-server-database] via SSL socket.
我知道有一种比应用程序 运行ning 在云上更快的连接方式,到目前为止我一直在学习本教程:
https://cloud.google.com/sql/docs/mysql/connect-run
但是我对最后一部分很困惑,它说我必须连接 unix 套接字,这是 docker 的东西还是在我的应用程序中? ConnectionPoolContextListener.java 在哪里
文件必须去?
它还在文件本身的评论中说不要将此用于 java 用户,而是使用
云 SQL JDBC 套接字工厂
但是当我转到 link 时,它说要为 mysql-connector 添加依赖项,但是 spring-gcp-starter-mysql 中不是已经包含了吗?它还说以这种格式创建连接字符串:
jdbc:mysql:///<DATABASE_NAME>?cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=<MYSQL_USER_NAME>&password=<MYSQL_USER_PASSWORD>
但是没有提到我把它放在哪里?
总结一下:
我有一个云 mysql 实例,启用了管理员 api。
我通过选择我的数据库实例在我的云 运行 中启用连接到云 SQL。
关于下一步是什么以及接下来要做什么的文档让我很困惑。
Cloud 运行 在配置 Cloud SQL 实例时提供一个 Unix 域套接字 - 它是一个可用于连接到数据库的文件。您正在使用 Cloud SQL Java 连接器,它允许您绕过使用 Unix 套接字(通常在 Java 上首选,因为 Unix 套接字不受本机支持)。
为了缩短冷启动时间,我建议您做两件事:
减少池中的连接数。虽然应用程序之间的最佳数量差异很大,但 20 几乎肯定比您需要的多得多。根据经验,try 2 * the number of cores used as your starting value, and increase/decrease as needed。 Hikari 使用 maximumPoolSize
来做到这一点。
调整池中的起始连接数。 Hikari 提供 minimumIdle
,它设置池中空闲连接的最小数量,最多 maximumPoolSize
。虽然 Hikari 建议不要设置此值(这样您就有了一个固定池),但将其设置为 0 意味着您的池不会在启动时建立连接。这意味着您的应用程序将启动得更快,但平均需要更长的时间才能从池中获得连接。
我在云 运行 上有一个 spring 启动应用程序 运行ning,到目前为止我只需要添加 spring 云 gcp mysql
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
<version>1.2.8.RELEASE</version>
</dependency>
我的 POM 中的依赖项,并配置我的 application.yml 文件以设置数据库名称、连接名称等,它 运行 在本地和云上都很好 [=71=]。
我的application.yml:
spring:
cloud:
gcp:
sql:
enabled: true
database-name: pos_database
instance-connection-name: pos-sys:asia-southeast2:pos-server-database
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: ***
password: ***
hikari:
maximum-pool-size: 20
但是我意识到冷启动性能受到了影响,因为在启动时套接字工厂通过 SSL 套接字连接到数据库实例:
2021-05-31 13:10:07.152 INFO 1539 --- [onnection adder] c.g.cloud.sql.core.CoreSocketFactory :
Connecting to Cloud SQL instance [pos-sys:asia-southeast2:owl-server-database] via SSL socket.
我收到一堆重复的台词
2021-05-31 13:10:09.461 INFO 1539 --- [connection adder] c.g.cloud.sql.core.CoreSocketFactory :
Connecting to Cloud SQL instance [pos-sys:asia-southeast2:pos-server-database] via SSL socket.
我知道有一种比应用程序 运行ning 在云上更快的连接方式,到目前为止我一直在学习本教程:
https://cloud.google.com/sql/docs/mysql/connect-run
但是我对最后一部分很困惑,它说我必须连接 unix 套接字,这是 docker 的东西还是在我的应用程序中? ConnectionPoolContextListener.java 在哪里 文件必须去? 它还在文件本身的评论中说不要将此用于 java 用户,而是使用
云 SQL JDBC 套接字工厂 但是当我转到 link 时,它说要为 mysql-connector 添加依赖项,但是 spring-gcp-starter-mysql 中不是已经包含了吗?它还说以这种格式创建连接字符串:
jdbc:mysql:///<DATABASE_NAME>?cloudSqlInstance=<INSTANCE_CONNECTION_NAME>&socketFactory=com.google.cloud.sql.mysql.SocketFactory&user=<MYSQL_USER_NAME>&password=<MYSQL_USER_PASSWORD>
但是没有提到我把它放在哪里?
总结一下:
我有一个云 mysql 实例,启用了管理员 api。
我通过选择我的数据库实例在我的云 运行 中启用连接到云 SQL。
关于下一步是什么以及接下来要做什么的文档让我很困惑。
Cloud 运行 在配置 Cloud SQL 实例时提供一个 Unix 域套接字 - 它是一个可用于连接到数据库的文件。您正在使用 Cloud SQL Java 连接器,它允许您绕过使用 Unix 套接字(通常在 Java 上首选,因为 Unix 套接字不受本机支持)。
为了缩短冷启动时间,我建议您做两件事:
减少池中的连接数。虽然应用程序之间的最佳数量差异很大,但 20 几乎肯定比您需要的多得多。根据经验,try 2 * the number of cores used as your starting value, and increase/decrease as needed。 Hikari 使用
maximumPoolSize
来做到这一点。调整池中的起始连接数。 Hikari 提供
minimumIdle
,它设置池中空闲连接的最小数量,最多maximumPoolSize
。虽然 Hikari 建议不要设置此值(这样您就有了一个固定池),但将其设置为 0 意味着您的池不会在启动时建立连接。这意味着您的应用程序将启动得更快,但平均需要更长的时间才能从池中获得连接。