本文档介绍了如何通过创建分散布置政策并将其应用于虚拟机实例来提高虚拟机实例的可靠性。
分散布置政策指定应将虚拟机分布在不同的可用性网域中。这种分布有助于减少特定于位置的中断(例如硬件错误),在运行大规模、分布式和复制的工作负载(如 Hadoop 分布式文件系统 [HDFS]、Cassandra 或 Kafka)时非常有用。
准备工作
-
设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
Select the tab for how you plan to use the samples on this page:
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- 创建布置政策:针对项目的
compute.resourcePolicies.create
权限 -
将布置政策应用于现有虚拟机:针对项目的
compute.instances.addResourcePolicies
权限 -
创建虚拟机:
- 针对项目的
compute.instances.create
权限 - 使用自定义映像创建虚拟机:针对映像的
compute.images.useReadOnly
权限 - 使用快照创建虚拟机:针对快照的
compute.snapshots.useReadOnly
权限 - 使用实例模板创建虚拟机:针对实例模板的
compute.instanceTemplates.useReadOnly
权限 - 为虚拟机分配旧版网络:针对项目的
compute.networks.use
权限 - 为虚拟机指定静态 IP 地址:针对项目的
compute.addresses.use
权限 - 使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的
compute.networks.useExternalIp
权限 - 为虚拟机指定子网:针对项目或所选子网的
compute.subnetworks.use
权限 - 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的
compute.subnetworks.useExternalIp
权限 - 为虚拟机设置虚拟机实例元数据:针对项目的
compute.instances.setMetadata
权限 - 为虚拟机设置标记:针对虚拟机的
compute.instances.setTags
权限 - 为虚拟机设置标签:针对虚拟机的
compute.instances.setLabels
权限 - 为虚拟机设置要使用的服务账号:针对虚拟机的
compute.instances.setServiceAccount
权限 - 为虚拟机创建新磁盘:针对项目的
compute.disks.create
权限 - 以只读或读写模式挂接现有磁盘:针对磁盘的
compute.disks.use
权限 - 以只读模式挂接现有磁盘:针对磁盘的
compute.disks.useReadOnly
权限
- 针对项目的
- 如需创建实例模板:针对项目的
compute.instanceTemplates.create
权限 -
如需创建托管式实例组 (MIG):针对项目的
compute.instanceGroupManagers.create
权限 POLICY_NAME
:分散布置政策的名称。DOMAIN_COUNT
:要在其中布置虚拟机的不同可用性网域数。该值必须在1
到8
之间。REGION
:要在其中创建布置政策的区域。PROJECT_ID
:要在其中创建布置政策的项目 ID。REGION
:要在其中创建布置政策的区域。POLICY_NAME
:分散布置政策的名称。DOMAIN_COUNT
:要在其中布置虚拟机的不同可用性网域数。该值必须在1
到8
之间。如果您的分散布置政策指定了多个可用性网域,那么您无需停止虚拟机即可将该政策应用于该虚拟机。不过,虚拟机可能需要迁移到其他可用性网域。在此过程中,Compute Engine 会根据主机维护政策停止或实时迁移虚拟机。
虚拟机和分散布置政策必须位于同一区域。例如,如果布置政策位于区域
us-central1
,则虚拟机必须位于us-central1
的可用区中。如果您需要将虚拟机迁移到其他区域,请参阅在可用区或区域之间移动虚拟机。VM_NAME
:现有虚拟机的名称。POLICY_NAME
:现有分散布置政策的名称。ZONE
:该虚拟机所在的可用区。PROJECT_ID
:分散布置政策和虚拟机所在项目的 ID。ZONE
:该虚拟机所在的可用区。VM_NAME
:现有虚拟机的名称。REGION
:分散布置政策所在的区域。POLICY_NAME
:现有分散布置政策的名称。VM_NAME
:要创建的虚拟机的名称。MACHINE_TYPE
:虚拟机的机器类型。POLICY_NAME
:现有分散布置政策的名称。ZONE
:要在其中创建虚拟机的可用区。PROJECT_ID
:分散布置政策所在项目的 ID。ZONE
:要用于创建虚拟机以及机器类型所在的可用区。您只能指定分散布置政策所在区域内的可用区。VM_NAME
:要创建的虚拟机的名称。MACHINE_TYPE
:虚拟机的机器类型。IMAGE_PROJECT
:映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:REGION
:分散布置政策所在的区域。POLICY_NAME
:现有分散布置政策的名称。您只能在与布置政策位于同一区域中批量创建用于指定分散布置政策的虚拟机。
使用分散布置政策批量创建虚拟机时,您可以选择指定要用于创建虚拟机的可用性网域。避免在单个网域中创建所有虚拟机。否则,您将无法降低单个硬件错误影响所有虚拟机的风险。
COUNT
:要创建的虚拟机数量。MACHINE_TYPE
:虚拟机的机器类型。NAME_PATTERN
:虚拟机的名称模式。如需替换虚拟机名称中的数字序列,请使用哈希值 (#
) 字符序列。例如,使用vm-#
作为名称模式将生成名称以vm-1
、vm-2
开头的虚拟机,一直到由COUNT
指定的虚拟机数量。POLICY_NAME
:现有分散布置政策的名称。ZONE
:要用于批量创建虚拟机的可用区。PROJECT_ID
:分散布置政策所在项目的 ID。ZONE
:要用于批量创建虚拟机的可用区。COUNT
:要创建的虚拟机数量。NAME_PATTERN
:虚拟机的名称模式。如需替换虚拟机名称中的数字序列,请使用哈希值 (#
) 字符序列。例如,使用vm-#
作为名称模式将生成名称以vm-1
、vm-2
开头的虚拟机,一直到由COUNT
指定的虚拟机数量。MACHINE_TYPE
:虚拟机的机器类型。IMAGE_PROJECT
:映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:POLICY_NAME
:现有分散布置政策的名称。如果您要创建区域实例模板,那么请在与分散布置政策相同的区域内创建该模板。否则,创建实例模板将失败。
创建实例模板时,您可以选择指定要用于创建虚拟机的可用性网域。避免在单个网域中创建所有虚拟机。否则,您将无法降低单个硬件错误影响所有虚拟机的风险。
INSTANCE_TEMPLATE_NAME
:实例模板的名称。MACHINE_TYPE
:使用实例模板创建的虚拟机的机器类型。POLICY_NAME
:现有分散布置政策的名称。如需创建全球实例模板:
instanceTemplates.insert
方法。如需创建区域级实例模板:
regionInstanceTemplates.insert
方法。PROJECT_ID
:分散布置政策所在项目的 ID。INSTANCE_TEMPLATE_NAME
:实例模板的名称。IMAGE_PROJECT
:映像所属的映像项目;例如debian-cloud
。如需详细了解支持的映像项目,请参阅公共映像。IMAGE
:指定以下其中一项:MACHINE_TYPE
:使用实例模板创建的虚拟机的机器类型。POLICY_NAME
:现有分散布置政策的名称。INSTANCE_GROUP_NAME
:要创建的 MIG 的名称。SIZE
:MIG 的大小。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有全局实例模板的名称。ZONE
:要用于创建 MIG 的可用区,该可用区必须位于分散布置政策所在的区域内。如需创建可用区级 MIG,请使用
instanceGroupManagers.insert
方法。如需创建区域级 MIG,请使用
regionInstanceGroupManagers.insert
方法。PROJECT_ID
:分散布置政策以及指定布置政策的实例模板所在项目的 ID。ZONE
:要用于创建 MIG 的可用区,该可用区必须位于分散布置政策所在的区域内。INSTANCE_GROUP_NAME
:要创建的 MIG 的名称。SIZE
:MIG 的大小。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有全局实例模板的名称。INSTANCE_GROUP_NAME
:现有 MIG 的名称。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有全局实例模板的名称。ZONE
:该 MIG 所在的可用区。 您只能将分散布置政策应用于与布置政策位于同一区域的 MIG。如需更新可用区级 MIG,请使用
instanceGroupManagers.insert
方法。如需更新区域级 MIG:
regionInstanceGroupManagers.insert
方法。PROJECT_ID
:您用于创建现有 MIG、分散布置政策以及指定分散布置政策的实例模板的项目的 ID。ZONE
:该 MIG 所在的可用区。 您只能将分散布置政策应用于与布置政策位于同一区域的 MIG。INSTANCE_GROUP_NAME
:现有 MIG 的名称。INSTANCE_TEMPLATE_NAME
:指定分散布置政策的现有全局实例模板的名称。了解如何查看布置政策。
了解如何替换、移除或删除布置政策。
了解如何使用指定布置政策的虚拟机执行以下操作:
详细了解维护事件期间的实时迁移过程。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需的角色
如需获得创建分散布置政策并将其应用于虚拟机所需的权限,请让管理员向您授予针对项目的 Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。此预定义角色包含创建分散布置政策并将其应用于虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
若要创建分散布置政策并将其应用于虚拟机,您需要以下权限:
创建分散放置政策
除非您想测试将分散布置政策应用于虚拟机的效果,否则 Google Cloud 建议创建具有两个或更多可用性网域的分散布置政策。这样可以降低所有虚拟机受单个硬件错误影响的风险。如需了解详情,请参阅分散布置政策简介。
如需创建分散布置政策,请选择以下选项之一:
gcloud
如需创建分散布置政策,请使用带有
--availability-domain-count
标志的gcloud compute resource-policies create group-placement
命令。gcloud compute resource-policies create group-placement POLICY_NAME \ --availability-domain-count=DOMAIN_COUNT \ --region=REGION
替换以下内容:
REST
如需创建分散布置政策,请向
resourcePolicies.insert
方法发出POST
请求。在请求正文中,包含availabilityDomainCount
字段。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies { "name": "POLICY_NAME", "groupPlacementPolicy": { "availabilityDomainCount": DOMAIN_COUNT } }
替换以下内容:
应用分散布置政策
您可以将分散布置政策应用于现有虚拟机或 MIG,也可以在创建虚拟机、实例模板或 MIG 时应用。
如需将分散布置政策应用于 Compute Engine 资源,请选择以下方法之一:
将分散布置政策应用于虚拟机后,您可以通过查看虚拟机的详细信息并检查
availabilityDomain
字段的值来验证虚拟机所在的可用性网域。将政策应用于现有虚拟机
在将分散布置政策应用于现有虚拟机之前,请考虑以下事项:
如果您想指定要将虚拟机放置在其中的可用性网域,请通过更新其属性将布置政策应用于该虚拟机。更新虚拟机的属性时,请务必添加
resourcePolicies
和scheduling.availabilityDomain
字段。如需将分散布置政策应用于现有虚拟机,请选择以下选项之一:
gcloud
如需将分散布置政策应用于现有虚拟机,请使用
gcloud compute instances add-resource-policies
命令。gcloud compute instances add-resource-policies VM_NAME \ --resource-policies=POLICY_NAME \ --zone=ZONE
替换以下内容:
REST
如需将分散布置政策应用于现有虚拟机,请向
instances.addResourcePolicies
方法发出POST
请求。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/addResourcePolicies { "resourcePolicies": [ "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME" ] }
替换以下内容:
在创建虚拟机时应用政策
您只能在与布置政策相同的区域中创建指定分散布置政策的虚拟机。
如需创建用于指定分散布置政策的虚拟机,请选择以下选项之一:
gcloud
如需创建指定分散布置政策的虚拟机,请使用带有
--resource-policies
标志的gcloud compute instances create
命令。gcloud compute instances create VM_NAME \ --machine-type=MACHINE_TYPE \ --resource-policies=POLICY_NAME \ --zone=ZONE
请替换以下内容:
(可选)如需指定要在其中创建虚拟机的可用区,请添加
--availability-domain
标志。gcloud compute instances create VM_NAME \ --availability-domain=DOMAIN_NUMBER \ --machine-type=MACHINE_TYPE \ --resource-policies=POLICY_NAME \ --zone=ZONE
将
DOMAIN_NUMBER
替换为要将虚拟机布置在其中的可用性网域的编号。该值必须在1
到分散布置政策中指定的网域数量之间。如需验证分散布置政策中的网域数量,请查看布置政策的详细信息。REST
如需创建指定分散布置政策的虚拟机,请向
instances.insert
方法发出POST
请求。在请求正文中,包含resourcePolicies
字段。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "resourcePolicies": [ "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME" ] }
请替换以下内容:
(可选)如需指定要在其中创建虚拟机的可用性网域,请在请求正文中添加
availabilityDomain
字段。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "resourcePolicies": [ "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME" ], "scheduling": { "availabilityDomain": DOMAIN_NUMBER } }
将
DOMAIN_NUMBER
替换为要将虚拟机布置在其中的可用性网域的编号。该值必须在1
到分散布置政策中指定的网域数量之间。如需验证分散布置政策中的网域数量,请查看布置政策的详细信息。如需详细了解用于创建虚拟机的配置选项,请参阅创建和启动虚拟机实例。
批量创建虚拟机时应用政策
在批量创建用于指定分散布置政策的虚拟机之前,请确保满足以下条件:
如需批量创建用于指定分散布置政策的虚拟机,请选择以下选项之一:
gcloud
若要批量创建指定分散布置政策的虚拟机,请使用带有
--resource-policies
标志的gcloud compute instances bulk create
命令。例如,如需在单个可用区中批量创建虚拟机并为虚拟机指定名称模式,请运行以下命令:
gcloud compute instances bulk create \ --count=COUNT \ --machine-type=MACHINE_TYPE \ --name-pattern=NAME_PATTERN \ --resource-policies=POLICY_NAME \ --zone=ZONE
请替换以下内容:
(可选)如需指定要在其中批量创建虚拟机的可用性网域,请添加
--availability-domain
标志。gcloud compute instances bulk create \ --availability-domain=DOMAIN_NUMBER \ --count=COUNT \ --machine-type=MACHINE_TYPE \ --name-pattern=NAME_PATTERN \ --resource-policies=POLICY_NAME \ --zone=ZONE
将
DOMAIN_NUMBER
替换为要将虚拟机布置在其中的可用性网域的编号。该值必须在1
到分散布置政策中指定的网域数量之间。如需验证分散布置政策中的网域数量,请查看布置政策的详细信息。REST
如需批量创建指定分散布置政策的虚拟机,请向
instances.bulkInsert
方法发出POST
。在请求正文中,包含resourcePolicies
字段。例如,如需在单个可用区中批量创建虚拟机并为虚拟机指定名称模式,请发出
POST
请求,如下所示:POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert { "count": "COUNT", "namePattern": "NAME_PATTERN", "instanceProperties": { "machineType": "MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "resourcePolicies": [ "POLICY_NAME" ] } }
替换以下内容:
(可选)如需指定要在其中批量创建虚拟机的可用性网域,请在请求正文中添加
availabilityDomain
字段。POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert { "count": "COUNT", "namePattern": "NAME_PATTERN", "instanceProperties": { "machineType": "MACHINE_TYPE", "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "networkInterfaces": [ { "network": "global/networks/default" } ], "resourcePolicies": [ "POLICY_NAME" ], "scheduling": { "availabilityDomain": DOMAIN_NUMBER } } }
将
DOMAIN_NUMBER
替换为要将虚拟机布置在其中的可用性网域的编号。该值必须在1
到分散布置政策中指定的网域数量之间。如需验证分散布置政策中的网域数量,请查看布置政策的详细信息。如需详细了解用于批量创建虚拟机的配置选项,请参阅批量创建虚拟机。
在创建实例模板时应用政策
在创建用于指定分散布置政策的实例模板之前,请确保以下各项:
创建指定分散布置政策的实例模板后,您便可以使用该模板执行以下操作:
如需创建用于指定分散布置政策的实例模板,请选择以下选项之一:
gcloud
如需创建指定紧凑布置政策的实例模板,请使用带有
--resource-policies
标志的gcloud compute instance-templates create
命令。例如,如需创建指定分散布置政策的全局实例模板,请运行以下命令:
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \ --machine-type=MACHINE_TYPE \ --resource-policies=POLICY_NAME
请替换以下内容:
(可选)如需指定要在其中创建虚拟机的可用区,请添加
--availability-domain
标志。gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \ --availability-domain=DOMAIN_NUMBER \ --machine-type=MACHINE_TYPE \ --resource-policies=POLICY_NAME
将
DOMAIN_NUMBER
替换为要在其中创建虚拟机的可用区编号。该值必须在1
到布置政策中指定的网域数量之间。如需验证分散布置政策中的网域数量,请查看布置政策的详细信息。REST
如需创建指定分散布置政策的实例模板,请向以下方法之一发出
POST
请求:在请求正文中,指定
resourcePolicies
字段。例如,如需创建指定分散布置政策的全球实例模板,请发出
POST
请求,如下所示:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name": "INSTANCE_TEMPLATE_NAME", "properties": { "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "machineType": "MACHINE_TYPE", "networkInterfaces": [ { "network": "global/networks/default" } ], "resourcePolicies": [ "POLICY_NAME" ] } }
替换以下内容:
(可选)如需指定要在其中创建虚拟机的可用性网域,请在请求正文中添加
availabilityDomain
字段。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name": "INSTANCE_TEMPLATE_NAME", "properties": { "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "machineType": "MACHINE_TYPE", "networkInterfaces": [ { "network": "global/networks/default" } ], "resourcePolicies": [ "POLICY_NAME" ], "scheduling": { "availabilityDomain": DOMAIN_NUMBER } } }
将
DOMAIN_NUMBER
替换为要在其中创建虚拟机的可用区编号。该值必须在1
到布置政策中指定的网域数量之间。如需验证分散布置政策中的网域数量,请查看布置政策的详细信息。如需详细了解用于创建实例模板的配置选项,请参阅创建实例模板。
将政策应用于 MIG 中的虚拟机
创建指定分散布置政策的实例模板后,您便可以使用该模板执行以下操作:
在创建 MIG 时应用政策
只有当虚拟机与布置政策位于同一区域时,您才能创建用于指定分散布置政策的虚拟机。
如需使用指定分散布置政策的实例模板创建 MIG,请选择以下选项之一:
gcloud
如需使用用于指定分散布置政策的实例模板创建 MIG,请使用
gcloud compute instance-groups managed create
命令。例如,如需使用用于指定分散布置政策的全局实例模板创建可用区级 MIG,请运行以下命令:
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --size=SIZE \ --template=INSTANCE_TEMPLATE_NAME \ --zone=ZONE
替换以下内容:
REST
如需使用用于指定分散布置政策的实例模板创建 MIG,请向以下方法之一发出
POST
请求:例如,如需使用用于指定分散布置政策的全局实例模板创建可用区级 MIG,请发出
POST
请求,如下所示:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers { "name": "INSTANCE_GROUP_NAME", "targetSize": SIZE, "versions": [ { "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME" } ] }
替换以下内容:
如需详细了解用于创建 MIG 的配置选项,请参阅创建 MIG 的基本场景。
将政策应用于现有 MIG
仅当现有 MIG 与布置政策位于同一区域或者位于布置政策所在区域中的某个可用区(对于可用区级 MIG)时,您才能将紧凑布置政策应用于该 MIG。
如需更新 MIG 以使用指定分散布置政策的实例模板,请选择以下选项之一:
gcloud
如需更新 MIG 以使用指定分散布置政策的实例模板,请使用
gcloud compute instance-groups managed rolling-action start-update
命令。例如,如需更新可用区级 MIG 以使用指定分散布置政策的实例模板,并将 MIG 中的现有虚拟机替换为指定模板属性的新虚拟机,请运行以下命令:
gcloud compute instance-groups managed rolling-action start-update INSTANCE_GROUP_NAME \ --version=template=INSTANCE_TEMPLATE_NAME \ --zone=ZONE
替换以下内容:
REST
如需更新 MIG 以使用指定分散布置政策的实例模板,并自动将模板和布置政策的属性应用于 MIG 中的现有虚拟机,请向以下方法之一发出
PATCH
请求。例如,如需更新可用区级 MIG 以使用用于指定分散布置政策的全球级实例模板,并将 MIG 中的现有虚拟机替换为指定模板属性的新虚拟机,请发出以下
PATCH
请求:PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME { "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME" }
替换以下内容:
如需详细了解用于更新 MIG 中虚拟机的配置选项,请参阅更新 MIG 中的虚拟机配置并将新配置应用于虚拟机。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-11-21。
-