I. Introduction

According to different scenarios, apolloconfig deployment architecture will have a variety of, here do not discuss the details, only from the macro perspective of the deployment architecture, to introduce the various deployment options

1.1 Flowchart

Use flowchart to express the deployment method, here first introduce some basic concepts

1.1.1 Dependencies

Dependencies are expressed with

  1. graph LR
  2. 1 --> 2

Indicates that 1 depends on 2, i.e. 2 must exist for 1 to work properly, e.g.

  1. flowchart LR
  2. Application --> MySQL

Means that the application needs to use MySQL to work properly

Dependencies can be complex, as well as having multiple layers of dependencies, for example

  1. flowchart LR
  2. SA[Service A] --> RC[Registration Center]
  3. SA[Service A] --> B[Service B] --> MySQL
  4. SA[Service A] --> Redis

Service A needs registry, Service B, Redis

And Service B needs MySQL

1.1.2 Inclusion Relationships

The containment relationship is specified with

  1. graph
  2. subgraph a
  3. b
  4. end

Indicates that a contains b, i.e. b is part of a. The containment relationship may be nested, e.g.

  1. flowchart LR
  2. subgraph Linux-Server
  3. subgraph JVM1
  4. Thread1.1
  5. Thread1.2
  6. end
  7. subgraph JVM2
  8. Thread2.1
  9. end
  10. MySQL
  11. Redis
  12. end

Means that on a Linux server, there are MySQL, Redis and 2 JVMs running, and there are Threads in each JVM

II. Standalone

The scenario of standalone deployment is usually for novice learners, or for testing environments with low performance requirements within the company, not for production environments

2.1 Standalone, Single Environment All In One

This is the simplest and most convenient way to deploy standalone

Requires:

  • 1 linux server: with JRE
  • 2 databases: 1 PortalDB and ConfigDB

As shown below, all modules are deployed on the same Linux machine, with a total of 3 JVM processes

  1. flowchart LR
  2. m[Meta Server]
  3. e[Eureka]
  4. c[Config Service]
  5. a[Admin Service]
  6. p[Portal]
  7. configdb[(ConfigDB)]
  8. portaldb[(PortalDB)]
  9. subgraph Linux Server
  10. subgraph JVM8080
  11. m
  12. e
  13. c
  14. end
  15. subgraph JVM8090
  16. a
  17. end
  18. subgraph JVM8070
  19. p
  20. end
  21. end
  22. c --> configdb
  23. a --> configdb
  24. p --> portaldb

JVM8080: the network port exposed to the public is 8080, there are Meta Server, Eureka, Config Service inside, and Config Service uses ConfigDB

JVM8090: the network port exposed to the public is 8090, there is Admin Service inside, and Admin Service uses ConfigDB

JVM8070: the network port exposed to the public is 8070, there is Portal inside, and Portal uses PortalDB

If you add the dependency between modules, flowchart will become

  1. flowchart LR
  2. m[Meta Server]
  3. e[Eureka]
  4. c[Config Service]
  5. a[Admin Service]
  6. p[Portal]
  7. configdb[(ConfigDB)]
  8. portaldb[(PortalDB)]
  9. subgraph Linux Server
  10. subgraph JVM8080
  11. m
  12. e
  13. c
  14. end
  15. subgraph JVM8090
  16. a
  17. end
  18. subgraph JVM8070
  19. p
  20. end
  21. end
  22. c --> configdb
  23. a --> configdb
  24. p --> portaldb
  25. m --> e
  26. c --> e
  27. a --> e
  28. p --> m
  29. p --> a

Config Service and Admin Service will register themselves to Eureka

Portal discovers Admin Service through Meta Server service

To make flowchart look more concise, you can just represent the dependencies between processes

  1. flowchart LR
  2. m[Meta Server]
  3. e[Eureka]
  4. c[Config Service]
  5. a[Admin Service]
  6. p[Portal]
  7. configdb[(ConfigDB)]
  8. portaldb[(PortalDB)]
  9. subgraph Linux Server
  10. subgraph JVM8080
  11. m
  12. e
  13. c
  14. end
  15. subgraph JVM8090
  16. a
  17. end
  18. subgraph JVM8070
  19. p
  20. end
  21. end
  22. JVM8080 --> configdb
  23. JVM8090 --> configdb
  24. JVM8070 --> portaldb
  25. jvm8090 --> jvm8080
  26. jvm8070 --> jvm8090

Process JVM8070 depends on process JVM8090 and PortalDB

Process JVM8090 depends on process JVM8080 and ConfigDB

Process JVM8080 depends on process JVM8080 and ConfigDB

2.2 Standalone, single environment Separate deployment

2.2.1 Stand-alone, single-environment deployment Separate deployment 3 Linux servers

The 3 JVM processes can also be spread across 3 Linux machines

Required.

  • 3 linux servers: 3 processes to be deployed separately
  • 2 databases
  1. flowchart LR
  2. m[Meta Server]
  3. e[Eureka]
  4. c[Config Service]
  5. a[Admin Service]
  6. p[Portal]
  7. configdb[(ConfigDB)]
  8. portaldb[(PortalDB)]
  9. subgraph Linux Server 1
  10. subgraph JVM8080
  11. m
  12. e
  13. c
  14. end
  15. end
  16. subgraph Linux Server 2
  17. subgraph JVM8090
  18. a
  19. end
  20. end
  21. subgraph Linux Server 3
  22. subgraph JVM8070
  23. p
  24. end
  25. end
  26. JVM8080 --> configdb
  27. JVM8090 --> configdb
  28. JVM8070 --> portaldb
  29. jvm8090 --> jvm8080
  30. jvm8070 --> jvm8090

2.2.2 Single machine, single environment Separate deployment 2 Linux servers

But usually we deploy Config Service and Admin Service on a single Linux server

Required:

  • 2 linux servers: 1 to deploy Portal, the other to deploy Config Service and Admin Service
  • 2 databases
  1. flowchart LR
  2. m[Meta Server]
  3. e[Eureka]
  4. c[Config Service]
  5. a[Admin Service]
  6. p[Portal]
  7. configdb[(ConfigDB)]
  8. portaldb[(PortalDB)]
  9. subgraph Linux Server 1
  10. subgraph JVM8080
  11. m
  12. e
  13. c
  14. end
  15. subgraph JVM8090
  16. a
  17. end
  18. end
  19. subgraph Linux Server 2
  20. subgraph JVM8070
  21. p
  22. end
  23. end
  24. JVM8080 --> configdb
  25. JVM8090 --> configdb
  26. JVM8070 --> portaldb
  27. jvm8090 --> jvm8080
  28. jvm8070 --> jvm8090

Later, in order to flowchart more concise, the content in JVM8080 will be simplified, only the Config Service will be displayed, and the Meta Server and Config Service inside will no longer be displayed

  1. flowchart LR
  2. subgraph JVM8080
  3. m[Meta Server]
  4. e[Eureka]
  5. c[Config Service]
  6. end
  7. subgraph new-JVM8080[JVM8080]
  8. new-c[Config Service]
  9. end
  10. JVM8080 --> |simplify| new-JVM8080

So the deployment architecture can be simplified and represented as

  1. flowchart LR
  2. c[Config Service]
  3. a[Admin Service]
  4. p[Portal]
  5. configdb[(ConfigDB)]
  6. portaldb[(PortalDB)]
  7. subgraph Linux Server 1
  8. subgraph JVM8080
  9. c
  10. end
  11. subgraph JVM8090
  12. a
  13. end
  14. end
  15. subgraph Linux Server 2
  16. subgraph JVM8070
  17. p
  18. end
  19. end
  20. JVM8080 --> configdb
  21. JVM8090 --> configdb
  22. JVM8070 --> portaldb
  23. jvm8090 --> jvm8080
  24. jvm8070 --> jvm8090

2.3 Single machine, dual environment

A single environment basically can not meet the actual application scenario, for example, the company has SIT test environment and UAT test environment, then you need to deploy two environments to provide configuration services

It is easy to think of the deployment architecture as follows, repeat the single machine, single environment deployment architecture 2 times

Required:

  • 2 linux servers
  • 4 databases
  1. flowchart LR
  2. subgraph SIT
  3. c1[SIT Config Service]
  4. a1[SIT Admin Service]
  5. p1[SIT Portal]
  6. configdb1[(SIT ConfigDB)]
  7. portaldb1[(SIT PortalDB)]
  8. subgraph SIT Linux Server
  9. subgraph sit-jvm-8080[SIT JVM8080]
  10. c1
  11. end
  12. subgraph sit-jvm-8090[SIT JVM8090]
  13. a1
  14. end
  15. subgraph sit-jvm-8070[SIT JVM8070]
  16. p1
  17. end
  18. end
  19. sit-jvm-8080 --> configdb1
  20. sit-jvm-8090 --> configdb1
  21. sit-jvm-8070 --> portaldb1
  22. sit-jvm-8090 --> sit-jvm-8080
  23. sit-jvm-8070 --> sit-jvm-8090
  24. end
  25. subgraph UAT
  26. c2[UAT Config Service]
  27. a2[UAT Admin Service]
  28. p2[UAT Portal]
  29. configdb2[(UAT ConfigDB)]
  30. portaldb2[(UAT PortalDB)]
  31. subgraph UAT Linux Server
  32. subgraph uat-jvm-8080[UAT JVM8080]
  33. c2
  34. end
  35. subgraph uat-jvm-8090[UAT JVM8090]
  36. a2
  37. end
  38. subgraph uat-jvm-8070[UAT JVM8070]
  39. p2
  40. end
  41. end
  42. uat-jvm-8080 --> configdb2
  43. uat-jvm-8090 --> configdb2
  44. uat-jvm-8070 --> portaldb2
  45. uat-jvm-8090 --> uat-jvm-8080
  46. uat-jvm-8070 --> uat-jvm-8090
  47. end

But this solution, there will be 2 Portal interface, can not be 1 interface to manage 2 environments, the use of experience is not very good, Portal can actually be deployed only 1 set, the recommended deployment architecture is as follows

  • 3 linux servers:
    • Portal Linux Server to deploy Portal alone
    • SIT Linux Server to deploy SIT’s Config Service and Admin Service
    • UAT Linux Server deploys the Config Service and Admin Service of UAT
  • 3 databases: 1 PortalDB + 1 SIT’s ConfigDB + 1 UAT’s ConfigDB
  1. flowchart LR
  2. p[Portal]
  3. portaldb[PortalDB]
  4. p --> portaldb
  5. subgraph Portal Linux Server
  6. subgraph JVM8070
  7. p
  8. end
  9. end
  10. subgraph SIT
  11. c1[SIT Config Service]
  12. a1[SIT Admin Service]
  13. configdb1[(SIT ConfigDB)]
  14. subgraph SIT Linux Server
  15. subgraph sit-jvm-8080[SIT JVM8080]
  16. c1
  17. end
  18. subgraph sit-jvm-8090[SIT JVM8090]
  19. a1
  20. end
  21. end
  22. sit-jvm-8080 --> configdb1
  23. sit-jvm-8090 --> configdb1
  24. sit-jvm-8090 --> sit-jvm-8080
  25. end
  26. subgraph UAT
  27. c2[UAT Config Service]
  28. a2[UAT Admin Service]
  29. configdb2[(UAT ConfigDB)]
  30. subgraph UAT Linux Server
  31. subgraph uat-jvm-8080[UAT JVM8080]
  32. c2
  33. end
  34. subgraph uat-jvm-8090[UAT JVM8090]
  35. a2
  36. end
  37. end
  38. uat-jvm-8080 --> configdb2
  39. uat-jvm-8090 --> configdb2
  40. uat-jvm-8090 --> uat-jvm-8080
  41. end
  42. jvm8070 --> sit-jvm-8090
  43. jvm8070 --> uat-jvm-8090

2.4 Standalone, three environments

Assuming that the usage scenario of 3 environments, SIT, UAT and PP, now needs to be satisfied.

On top of the previous dual environments, add 1 more PP environment Linux service and ConfigDB can be added, Portal to manage these 3 environments by modifying the configuration

  1. flowchart LR
  2. p[Portal]
  3. portaldb[PortalDB]
  4. p --> portaldb
  5. subgraph Portal Linux Server
  6. subgraph JVM8070
  7. p
  8. end
  9. end
  10. subgraph SIT
  11. c1[SIT Config Service]
  12. a1[SIT Admin Service]
  13. configdb1[(SIT ConfigDB)]
  14. subgraph SIT Linux Server
  15. subgraph sit-jvm-8080[SIT JVM8080]
  16. c1
  17. end
  18. subgraph sit-jvm-8090[SIT JVM8090]
  19. a1
  20. end
  21. end
  22. sit-jvm-8080 --> configdb1
  23. sit-jvm-8090 --> configdb1
  24. sit-jvm-8090 --> sit-jvm-8080
  25. end
  26. subgraph UAT
  27. c2[UAT Config Service]
  28. a2[UAT Admin Service]
  29. configdb2[(UAT ConfigDB)]
  30. subgraph UAT Linux Server
  31. subgraph uat-jvm-8080[UAT JVM8080]
  32. c2
  33. end
  34. subgraph uat-jvm-8090[UAT JVM8090]
  35. a2
  36. end
  37. end
  38. uat-jvm-8080 --> configdb2
  39. uat-jvm-8090 --> configdb2
  40. uat-jvm-8090 --> uat-jvm-8080
  41. end
  42. subgraph PP
  43. c3[PP Config Service]
  44. a3[PP Admin Service]
  45. configdb3[(PP ConfigDB)]
  46. subgraph PP Linux Server
  47. subgraph pp-jvm-8080[PP JVM8080]
  48. c3
  49. end
  50. subgraph pp-jvm-8090[PP JVM8090]
  51. a3
  52. end
  53. end
  54. pp-jvm-8080 --> configdb3
  55. pp-jvm-8090 --> configdb3
  56. pp-jvm-8090 --> pp-jvm-8080
  57. end
  58. jvm8070 --> sit-jvm-8090
  59. jvm8070 --> uat-jvm-8090
  60. jvm8070 --> pp-jvm-8090

2.5 Single machine, multiple environments

The principle is the same as above, 1 Linux server per environment + 1 ConfigDB

Then Portal can add the information of the new environment

III. High Availability

1 environment only 1 Config Service process, can not meet the high availability, in order to avoid a single point of downtime affect the availability of the system, the need for multi-instance deployment, that is, the deployment of multiple Java processes on different Linux servers

3.1 Minimal High Availability, Single Environment

Returning to the common non-high-availability deployment approach, the

  1. flowchart LR
  2. c[Config Service]
  3. a[Admin Service]
  4. p[Portal]
  5. configdb[(ConfigDB)]
  6. portaldb[(PortalDB)]
  7. subgraph Linux Server 1
  8. subgraph JVM8080
  9. c
  10. end
  11. subgraph JVM8090
  12. a
  13. end
  14. end
  15. subgraph Linux Server 2
  16. subgraph JVM8070
  17. p
  18. end
  19. end
  20. JVM8080 --> configdb
  21. JVM8090 --> configdb
  22. JVM8070 --> portaldb
  23. JVM8090 --> JVM8080
  24. JVM8070 --> JVM8090

When Linux Server 1 is down, the client can only read the config-cache on the local disk. If you need to prevent a single Linux from going down and making the Config Service unavailable, you can try adding another Linux machine.

Required:

  • 3 linux servers: 1 to deploy Portal, and 2 to deploy Config Service and Admin Service respectively
  • 2 databases
  1. flowchart LR
  2. c-1[Config Service]
  3. c-2[Config Service]
  4. a-1[Admin Service]
  5. a-2[Admin Service]
  6. p[Portal]
  7. configdb[(ConfigDB)]
  8. portaldb[(PortalDB)]
  9. JVM8080-1[JVM8080]
  10. JVM8080-2[JVM8080]
  11. JVM8090-1[JVM8090]
  12. JVM8090-2[JVM8090]
  13. subgraph Linux Server 1.1
  14. subgraph JVM8080-1[JVM8080]
  15. c-1
  16. end
  17. subgraph JVM8090-1[JVM8090]
  18. a-1
  19. end
  20. end
  21. subgraph Linux Server 1.2
  22. subgraph JVM8080-2[JVM8080]
  23. c-2
  24. end
  25. subgraph JVM8090-2[JVM8090]
  26. a-2
  27. end
  28. end
  29. subgraph Linux Server 2
  30. subgraph JVM8070
  31. p
  32. end
  33. end
  34. JVM8080-1 --> configdb
  35. JVM8090-1 --> configdb
  36. JVM8080-2 --> configdb
  37. JVM8090-2 --> configdb
  38. JVM8070 --> portaldb
  39. JVM8090-1 --> JVM8080-1
  40. JVM8090-2 --> JVM8080-2
  41. JVM8070 --> JVM8090-1
  42. JVM8070 --> JVM8090-2

With this deployment, if Linux Server 1.1 or Linux Server 1.2 is down, the system is still available.

3.2 Highly available, single environment

On the basis of the above, if the number of clients is large (e.g. tens of thousands of Java processes), you can horizontally extend the Config Service by introducing Linux Server 1.3, Linux Server 1.4, …

Admin Service can be much less than Config Service in terms of number due to only Portal access.

Please refer to Apollo Performance Test Report for details on how to evaluate the number of Config Service.

3.3 High Availability, Dual Environment

As in 2.3 Single machine, dual environment, if you want to make both SIT and UAT highly available, you only need to add more machines to each environment, as shown below, each environment has 2 Linux Servers, if you have performance requirements, you can use more machines in each environment to deploy Config Service that can be

  1. flowchart LR
  2. p[Portal]
  3. portaldb[(PortalDB)]
  4. p --> portaldb
  5. subgraph Portal Linux Server
  6. subgraph JVM8070
  7. p
  8. end
  9. end
  10. subgraph SIT
  11. sit-c1[SIT Config Service]
  12. sit-a1[SIT Admin Service]
  13. sit-c2[SIT Config Service]
  14. sit-a2[SIT Admin Service]
  15. sit-configdb[(SIT ConfigDB)]
  16. subgraph SIT Linux Server 2.1
  17. subgraph sit-c1-jvm-8080[SIT JVM8080]
  18. sit-c1
  19. end
  20. subgraph sit-c1-jvm-8090[SIT JVM8090]
  21. sit-a1
  22. end
  23. end
  24. subgraph SIT Linux Server 2.2
  25. subgraph sit-c2-jvm-8080[SIT JVM8080]
  26. sit-c2
  27. end
  28. subgraph sit-c2-jvm-8090[SIT JVM8090]
  29. sit-a2
  30. end
  31. end
  32. sit-c1-jvm-8080 --> sit-configdb
  33. sit-c1-jvm-8090 --> sit-configdb
  34. sit-c2-jvm-8080 --> sit-configdb
  35. sit-c2-jvm-8090 --> sit-configdb
  36. sit-c1-jvm-8090 --> sit-c1-jvm-8080
  37. sit-c2-jvm-8090 --> sit-c2-jvm-8080
  38. end
  39. subgraph UAT
  40. uat-c1[UAT Config Service]
  41. uat-a1[UAT Admin Service]
  42. uat-c2[UAT Config Service]
  43. uat-a2[UAT Admin Service]
  44. uat-configdb[(UAT ConfigDB)]
  45. subgraph UAT Linux Server 2.1
  46. subgraph uat-c1-jvm-8080[UAT JVM8080]
  47. uat-c1
  48. end
  49. subgraph uat-c1-jvm-8090[UAT JVM8090]
  50. uat-a1
  51. end
  52. end
  53. subgraph UAT Linux Server 2.2
  54. subgraph uat-c2-jvm-8080[UAT JVM8080]
  55. uat-c2
  56. end
  57. subgraph uat-c2-jvm-8090[UAT JVM8090]
  58. uat-a2
  59. end
  60. end
  61. uat-c1-jvm-8080 --> uat-configdb
  62. uat-c1-jvm-8090 --> uat-configdb
  63. uat-c2-jvm-8080 --> uat-configdb
  64. uat-c2-jvm-8090 --> uat-configdb
  65. uat-c1-jvm-8090 --> uat-c1-jvm-8080
  66. uat-c2-jvm-8090 --> uat-c2-jvm-8080
  67. end
  68. jvm8070 --> sit-c1-jvm-8090
  69. jvm8070 --> sit-c2-jvm-8090
  70. jvm8070 --> uat-c1-jvm-8090
  71. jvm8070 --> uat-c2-jvm-8090

3.4 High Availability, Multiple Environments

On top of the above, to add an environment such as BETA environment, you need to add 2 and more Linux servers + 1 ConfigDB

Portal adds the information of the new environment, pointing to apollo.meta of BETA environment

3.5 High Availability, Single Environment, Single Server Room

In the actual production environment, many companies isolate their test environment, so the production environment is a single environment, with only one PRO environment

When there is only 1 server room, refer to 3.2 Highly available, single environment

3.6 Highly available, single environment, dual server rooms

If there are 2 server rooms, usually there is network isolation between the server rooms. If it is a co-located server room, idc1 and idc2, you can use the following deployment method

  1. flowchart LR
  2. idc1-p[idc1 Portal]
  3. idc2-p[idc2 Portal]
  4. portaldb[(PortalDB)]
  5. idc1-p --> portaldb
  6. idc2-p --> portaldb
  7. configdb[(ConfigDB)]
  8. idc1-c1-jvm-8080 --> configdb
  9. idc1-c1-jvm-8090 --> configdb
  10. idc1-c2-jvm-8080 --> configdb
  11. idc1-c2-jvm-8090 --> configdb
  12. idc2-c1-jvm-8080 --> configdb
  13. idc2-c1-jvm-8090 --> configdb
  14. idc2-c2-jvm-8080 --> configdb
  15. idc2-c2-jvm-8090 --> configdb
  16. subgraph idc1
  17. subgraph idc1 Portal Linux Server
  18. subgraph idc1-JVM8070
  19. idc1-p
  20. end
  21. end
  22. idc1-c1[idc1 Config Service]
  23. idc1-a1[idc1 Admin Service]
  24. idc1-c2[idc1 Config Service]
  25. idc1-a2[idc1 Admin Service]
  26. subgraph idc1 Linux Server 2.1
  27. subgraph idc1-c1-jvm-8080[idc1 JVM8080]
  28. idc1-c1
  29. end
  30. subgraph idc1-c1-jvm-8090[idc1 JVM8090]
  31. idc1-a1
  32. end
  33. end
  34. subgraph idc1 Linux Server 2.2
  35. subgraph idc1-c2-jvm-8080[idc1 JVM8080]
  36. idc1-c2
  37. end
  38. subgraph idc1-c2-jvm-8090[idc1 JVM8090]
  39. idc1-a2
  40. end
  41. end
  42. idc1-c1-jvm-8090 --> idc1-c1-jvm-8080
  43. idc1-c2-jvm-8090 --> idc1-c2-jvm-8080
  44. end
  45. subgraph idc2
  46. subgraph idc2 Portal Linux Server
  47. subgraph idc2-JVM8070
  48. idc2-p
  49. end
  50. end
  51. idc2-c1[idc2 Config Service]
  52. idc2-a1[idc2 Admin Service]
  53. idc2-c2[idc2 Config Service]
  54. idc2-a2[idc2 Admin Service]
  55. subgraph idc2 Linux Server 2.1
  56. subgraph idc2-c1-jvm-8080[idc2 JVM8080]
  57. idc2-c1
  58. end
  59. subgraph idc2-c1-jvm-8090[idc2 JVM8090]
  60. idc2-a1
  61. end
  62. end
  63. subgraph idc2 Linux Server 2.2
  64. subgraph idc2-c2-jvm-8080[idc2 JVM8080]
  65. idc2-c2
  66. end
  67. subgraph idc2-c2-jvm-8090[idc2 JVM8090]
  68. idc2-a2
  69. end
  70. end
  71. idc2-c1-jvm-8090 --> idc2-c1-jvm-8080
  72. idc2-c2-jvm-8090 --> idc2-c2-jvm-8080
  73. end
  74. idc1-JVM8070 --> idc1-c1-jvm-8090
  75. idc1-JVM8070 --> idc1-c2-jvm-8090
  76. idc2-JVM8070 --> idc2-c1-jvm-8090
  77. idc2-JVM8070 --> idc2-c2-jvm-8090
  78. `

Each server room has its own set of Portal, Config Service, Admin Service

For ConfigDB, under the same city and dual server rooms, the ConfigDB connected is the same, there is no 2 different ConfigDB, for PortalDB is also the same, need to connect the same

ConfigDB and PortalDB are not put into idc1 or idc2 in the diagram, you need to choose the suitable MySQL architecture and deployment method by yourself.

IV. Deployment diagram

4.1 In Ctrip

In ctrip, We deployment strategy is as follows.

Deployment

  • Portal is deployed in the server room of the production environment, through which the configuration of FAT, UAT, PRO and other environments are managed directly
  • Meta Server, Config Service and Admin Service are deployed separately in each environment, using separate databases
  • Meta Server, Config Service and Admin Service are deployed in two server rooms in the production environment to achieve duplexing
  • Meta Server and Config Service are deployed in the same JVM process, and Admin Service is deployed in another JVM process on the same server

4.2 Sample deployment diagram

Sample deployment diagram contributed by @lyliyongblue (we recommend right-clicking a new window to open a larger version).

Deployment