40

通过 Compose for MongoDB 监控云中 Java 微服务的响应时间

 5 years ago
source link: http://www.ibm.com/developerworks/cn/cloud/library/check-response-times-for-crud-services-with-mongodb-and-java-liberty/index.html?ca=drs-&%3Butm_source=tuicool&%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我的一位客户让我帮助其实现一个简单的仪表板概念,该概念将显示 IBM Dedicated Cloud 上公开的各种数据服务的 CRUD(创建、读取、更新、删除)操作的一系列可用性和响应时间。正好,这也是一个很好的示例,能展示如何在这些数据服务上运用 CRUD 操作,这些服务既可以从本地机器上的 Java Open Liberty 服务器访问,也可以通过 VCAP 配置文件绑定到云中。

免费试用 IBM Cloud

利用IBM Cloud Lite 快速轻松地构建您的下一个应用程序。您的免费帐户从不过期,而且您会获得 256 MB 的 Cloud Foundry 运行时内存和包含 Kubernetes 集群的 2 GB 存储空间。了解所有细节并确定如何开始。如果您不熟悉 IBM Cloud,请查阅 developerWorks 上的 IBM Cloud Essentials 课程

本教程将指导您检查 IBM Cloud 上托管的服务的响应时间。这是一个简单的工具,它可以展示如何在使用 Cloudant、IBM Message Hub、MongoDB、Elastic Search 等战略数据源上的 Java 应用程序/微服务中执行基本的 CRUD 操作。

这篇操作技巧文章通过示例展示了如何使用 IBM Cloud 上托管和管理的 Compose for MongoDB。这里展示的方法是,利用通过访问 CRUD 操作获得的报告,生成一个 JSON 响应文件,它将提供访问每个操作所需的时间,以及总操作时间。您将尝试创建的响应文件示例如下所示。

{
        "service" :  "mongodb" , 
        "operations" : [{ 
                "type" :  "create" , 
                "response_time" :  30 , 
                "response_code" :  200 , 
                "desc" : { 
                    "visitor id" :  "594ddeee34a639002645674d"  
                 } 
             }, 
             {
                "type" :  "read" , 
                "response_time" :  25 , 
                "response_code" :  200 , 
                "desc" : { 
                    "visitor id" :  "594ddeee34a639002645674d" 
                 } 
             }, 
             {
                "type" :  "update" , 
                "response_time" :  49 , 
                "response_code" :  200 , 
                "desc" : { 
                    "visitor id" :  "594ddeee34a639002645674d"
                } 
             }, 
             {
                "type" :  "delete" , 
                "response_time" :  28 , 
                "response_code" :  200 , 
                "desc" : { 
                    "deleted visitor id" :  "594ddeee34a639002645674d" 
                 } 
             }, 
             {
        "response_code" :  200 , 
        "desc" :  "operations implemented
                    CRUD/CRUD" 
    }

学习目标

学完本教程后,读者将会了解如何:

  • 跟踪服务响应时间
  • 在本地和云中运行 Java Open Liberty 服务器
  • 将 Java Open Liberty 服务器连接到公开的服务

前提条件

在开始之前,您的机器上需要有以下软件:

您还需要:

  • 一个IBM Cloud 帐户(请注意,我们将使用非 Lite 版服务)
  • 一个 IDE。在本例中,我使用 Eclipse with Bluemix 插件 将应用程序部署到云中。

预估时间

若是第一次设置环境,完成整个实验大约需要 20 分钟到 60 分钟。

步骤

第 1 步. 克隆样本应用程序

  1. 克隆 https://github.com/blumareks/BluemixTestDashboard  GitHub 存储库。
    git clone https://github.com/blumareks/BluemixTestDashboard
  2. 将目录更改为 MongoDB 样本应用程序所在的目录。为此,请使用以下指令:
    cd BluemixTestDashboard/GetStartedJavaMongoDb

目前做到这里已经足够。我们接下来将在 IBM Cloud 上配置一些资源,然后返回到克隆的存储库。

第 2 步. 创建云服务

  1. 登录到IBM Cloud 控制台。
  2. Catalog 中搜索 Compose for MongoDB 和 Liberty for Java。 nA7Nj2v.png!web
    nA7Nj2v.png!web
    zaE7Nvz.png!web
    zaE7Nvz.png!web
  3. 创建 Liberty for Java 样本应用程序和 Compose for MongoDB  服务。
  4. 创建它们后,将 MongoDB 服务与 Liberty for Java 应用程序绑定在一起。
    1. 单击 Liberty for Java 服务的 Connections 选项卡,然后单击 Create connection  按钮。 RfEbaen.png!web
      RfEbaen.png!web
    2. 选择 Compose for MongoDB  服务。 jUvABjR.png!web
      jUvABjR.png!web
    3. 单击 Connect  按钮。 naARFfN.png!web
      naARFfN.png!web

此操作将会启动 Liberty for Java 服务的重新载入过程。

QNbiEzi.png!web

QNbiEzi.png!web

V7ZNbmR.png!web

V7ZNbmR.png!web

第 3 步. 将 TLS/SSL 的 JVM 系统属性连接到 Compose MongoDB

  1. 转到 Compose for MongoDB 服务中的 Manage  选项卡。
  2. 向下滚动,可以注意到该连接已启用 SSL。确认连接 URL 和证书,您很快需要使用它们。 YF7VRbI.png!web

    YF7VRbI.png!web

    此外,您可以使用 VCAP 文件:

    1. 选择 Connection  选项卡。
    2. 从三点式选项菜单中,选择 View CredentialsquYvInM.png!web
      quYvInM.png!web
      来自 VCAP 文件的连接凭证如下所示:
    {
    		        "compose-for-mongodb" : [{ 
    		            "credentials" : { 
    		                "db_type" :  "mongodb" , 
    		                "maps" : [], 
    		                "instance_administration_api" : { 
    		                    "instance_id" :  "6d1dd5bf-9274-4373-aab1-5bcace1d1e5c" , 
    		                    "root" :  "https://composebroker-dashboard-public.eu-gb.mybluemix.net/api" , 
    		                    "deployment_id" :  "5aec531b7852900026da6301" 
                    },
    		                "name" :  "bmix-lon-yp-6d1dd5bf-9274-4373-aab1-5bcace1d1e5c" , 
    		                "uri_cli" :  "mongo --ssl
                        --sslAllowInvalidCertificates
                        sl-eu-lon-2-portal.9.dblayer.com:26135/compose -u admin -p <your
                        password will be here> --authenticationDatabase admin" , 
    		                "ca_certificate_base64" :  "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURtekNDQW9PZ0F3SUJBZ0lFV3V4VEpUQU5CZ2txaGtpRzl3MEJBUTBGQURCUE1VMHdTd1lEVlFRRERFUmkKYkhWbGJXbDRMbXhwZEdWQWNtOWliM1Jw" , 
    		                "deployment_id" :  "5aec531b7852900026da6301" , 
    		                "uri" :  "mongodb://admin:<your password will
                        be
                        here>@sl-eu-lon-2-portal.9.dblayer.com:26135,sl-eu-lon-2-portal.10.dblayer.com:26135/compose?authSource=admin&ssl=true" 
                    },
    		            "syslog_drain_url" :  null , 
    		            "volume_mounts" : [], 
    		            "label" :  "compose-for-mongodb" , 
    		            "provider" :  null , 
    		            "plan" :  "Standard" , 
    		            "name" :  "Compose for MongoDB-fg" , 
    		            "tags" : [ 
    		                "big_data" , 
    		                "data_management" , 
    		                "ibm_created" , 
    		                "ibm_dedicated_public" , 
    		                "eu_access" 
                        ]
                    }]
                   }

    我们需要在应用程序中设置多个 JVM 系统属性,以确保客户端能验证服务器提供的 TLS/SSL 证书:

    • javax.net.ssl.trustStore :包含签名权威机构证书的信任库路径。
    • javax.net.ssl.trustStorePassword :访问此信任库的密码。

    注意,此信任库通常是使用 JDK 中提供的 keytool  命令行程序创建的。例如:

    keytool -importcert -trustcacerts -file <path to certificate authority file> -keystore <path to trust store> -storepass<password>
  3. 返回到 Compose for MongoDB 控制台,获取 Overview 页面上提供的 SSL 证书。单击 SSL certificate  按钮显示该证书,然后复制它。 aARj2eE.png!web
    aARj2eE.png!web
  4. 将 SSL 证书保存到一个文件中:
    cat  >  mongodbcert.crt
    证书内容应该类似于:
    -----BEGIN CERTIFICATE-----
                LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURtekNDQW9PZ0F3SUJBZ0lFV3V4VEpUQU5CZ2txaGtpRzl3MEJBUTBGQURCUE1VMHdTd1lEVlFRRERFUmkKYkhWbGJXbDRMbXhwZEdWQWNtOWliM1Jw
                [... removed couple lines ...]
                VFqMG14WGtCOWkvODFzQ01JCkYxaTd5SzUzZW1WRkt0dlN5bVNkQk9jUzFVVitYN241SmI4WU9oUHF5KzJtR3dWREpLMmJHclV2RTNnTTlLa3kKSVdDVUlJL21HdUt2RzVncElPRXQKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo
                -----END CERTIFICATE-----
  5. 使用 keytool 命令为您的系统创建 MongoDB 密钥库。请注意,您可能需要考虑将该密码更改为更合适的密码。
    keytool -importcert -trustcacerts -file ./mongodbcert.crt -keystore ./mongoKeyStore -storepass aftereight
  6. 完成上述操作后,将 mongoKeyStore  放在克隆的存储库的这个路径中:
    GetStartedJavaMongoDb/src/main/resources/mongoKeyStore
  7. 在项目根目录中,在一个终端运行 Maven(运行 mvn --version  来确保它已安装):
    mvn install
    mvn install 后的文档将存储在本地的这个位置:
    /your-path-to-the-target/GetStartedJavaMongoDb/target/TestJavaMongo-1.0-SNAPSHOT/WEB-INF/classes/mongoKeyStore
    或者 IBM Cloud 上(在 cf push  命令后):
    /home/vcap/app/wlp/usr/servers/defaultServer/apps/myapp.war/WEB-INF/classes/mongoKeyStore

典型的应用程序还需要设置一些 JVM 系统属性,以确保客户端向 MongoDB 提供一个 TLS/SSL 证书:

  • javax.net.ssl.keyStore :包含客户端 TLS/SSL 证书的密钥库路径。
  • javax.net.ssl.keyStorePassword :访问此密钥库的密码。

第 4 步.通过 IBM Cloud 中的 Compose for MongoDB 在本地运行 Open Liberty

为了在本地测试并运行该服务,可能需要在本地服务器上安装 JAXRS-2.0 功能。我将使用 Eclipse IDE 来实现此目的。添加了 JAXRS-2.0 的服务器配置屏幕如下图所示:

yquIZbU.png!web

yquIZbU.png!web

Eclipse IDE 管理的本地 Liberty 服务器的源代码如下所示:

< server   description = "new server" > 
     <!-- Enable features --> 
     < featureManager > 
         < feature >localConnector-1.0</ feature > 
         < feature >servlet-3.1</ feature > 
         < feature >jaxrs-2.0</ feature > 
     </ featureManager > 
     < applicationMonitor   updateTrigger="mbean" /> 
     < webApplication   contextRoot="TestJavaMongo"   id="GetStartedJavaMongoDb"   location="TestJavaMongo.war"   name="GetStartedJavaMongoDb" /> 
 </ server >

使用 mvn install  命令构建该项目后,就可以在上面配置的本地服务器上运行它了。

7JfIrub.png!web

7JfIrub.png!web

下图显示了在本地调用该服务后的结果:

fEZFvy3.png!web

fEZFvy3.png!web

首次调用大约用了 5 秒的往返时间(我们需要创建数据库并远程运行所有内容),此时间不是非常可观。但下一步将介绍如何在 IBM Cloud 中运行相同的服务,那时的响应速度至少快 10 倍。以下是我的结果,但请记住,以后的调用会更快,因为我们的服务已经配置好并建立了连接。

{          
        "service" :  "mongodb" , 
        "operations" : [{ 
                "type" :  "create" , 
                "response_time" :  386 , 
                "response_code" :  200 , 
                "desc" : { 
                    "visitor id" :  "5aec8faf17683ad076f4fc58" 
                  }
          },
          {
                "type" :  "read" , 
                "response_time" :  303 , 
                "response_code" :  200 , 
                "desc" : { 
                    "visitor id" :  "5aec8faf17683ad076f4fc58"   
                 }
          },
          {
                "type" :  "update" , 
                "response_time" :  579 , 
                "response_code" :  200 , 
                "desc" : { 
                    "visitor id" :  "5aec8faf17683ad076f4fc58" 
                 }
          },
          {
                "type" :  "delete" , 
                "response_time" :  164 , 
                "response_code" :  200 , 
                "desc" : { 
                    "deleted visitor id" :  "5aec8faf17683ad076f4fc58" 
                }
          },
          {
        "response_code" :  200 , 
        "desc" :  "operations implemented
                    CRUD/CRUD" 
}

第 5 步.通过 IBM Cloud 中的 Compose for MongoDB 运行 Open Liberty

至少可通过两种方式在云中部署和运行此服务。您可以手动调节 Cloud Foundry 文件并使用 Cloud Foundry CLI 运行它,或者使用适用于 Eclipse 的 IBM Cloud 连接器。在本教程中,我们使用了 Cloud Foundry CLI。

  1. 从 IBM Cloud 下载 CLI。
    1. 转到该 Liberty 服务。
    2. 选择 Getting started  选项卡。
    3. 下载命令行接口: ARBFVvr.png!web
      ARBFVvr.png!web
  2. 安装 CLI 后,就可以运行 version 命令:
    ibmcloud --version  
    	  ibmcloud version 0.6.6+d4d59ab5-2018-03-20T07:49:59+00:00
  3. 设置您的访问点。(请注意,API 访问点取决于云在美国、欧盟、澳大利亚等国所在的位置。)
    ibmcloud api https://api.<your access point here>
  4. 登录到服务。(请注意,如果使用联合登录,请使用 ibmcloud login -sso  代替。)
    ibmcloud login -u <your-email>
  5. 登录后,可以交互式地选择要使用的组织和空间。
    ibmcloud target --cf
  6. 现在编辑 Cloud Foundry 配置文件 manifest.yml。该文件应包含应用程序(您的 Liberty 服务)的名称和绑定的 Compose for MongoDB 服务。
    在本例中,该文件如下所示:
    applications : 
    	    -  name :  <your service name> 
    	       random-route :  true 
    	       path :  target/TestJavaMongo.war 
    	       memory :  256M 
    	       instances :  1 
    	       name :  test-java-mongodb 
    	       host :  test-java-mongodb
  7. 在 Java 类文件中更新 MongoDB 密钥库在云中的位置: MongoDbVisitorStore.java
  8. 您现在可以使用 Maven 构建适用于云的应用程序:
    mvn clean  
    	  mvn install

mvn 命令成功完成运行后,您就可以将应用程序推送到云了。这将花费几分钟时间 - 足够喝一杯咖啡了。:-)

ibmcloud app push <your service name>

可以考虑查看一下该文档的日志 - 在该服务的仪表板上(参见 Logs 选项卡)或在终端使用 CLI:

ibmcloud app logs <your service name>

但是请注意,CRUD 操作比第一次调用快 100 倍,比来自本地机器的远程调用快 10 倍。

{
         "service" :  "mongodb" , 
         "operations" : [{ 
                "type" :  "create" , 
                "response_time" :  12 , 
                "response_code" :  200 , 
                "desc" : { 
                    "visitor id" :  "5aecb5b0705978002421614a" 
                 }
          },
          {
                "type" :  "read" , 
                "response_time" :  18 , 
                "response_code" :  200 , 
                "desc" : { 
                    "visitor id" :  "5aecb5b0705978002421614a" 
                     }
          },
          {
                "type" :  "update" , 
                "response_time" :  11 , 
                "response_code" :  200 , 
                "desc" : { 
                    "visitor id" :  "5aecb5b0705978002421614a"
                      }
          },
          {
                "type" :  "delete" , 
                "response_time" :  8 , 
                 "response_code" :  200 , 
                "desc" : { 
                    "deleted visitor id" :  "5aecb5b0705978002421614a" 
                      }
          },
          {
        "response_code" :  200 , 
        "desc" :  "operations implemented
                    CRUD/CRUD" 
    }

结束语

希望您喜欢阅读本教程!我的下一篇教程将介绍如何添加一个应用程序来读取、分析和存储结果。请保持关注,可以在 Twitter @blumareks 或在 Medium @blumareks 上关注我,了解更多的更新信息!

本文翻译自: Monitor response times of cloud Java microservices with Compose for MongoDB (2018-12-10)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK