You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2019/10/30 04:40:59 UTC

[skywalking] 01/01: parameterize the cache size.

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch cache-param
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 95d8866de7ed9fa3c8405c0a86f74fc86d684b2a
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Wed Oct 30 10:10:45 2019 +0530

    parameterize the cache size.
---
 .../skywalking/oap/server/core/CoreModuleConfig.java  |  8 ++++++++
 .../oap/server/core/CoreModuleProvider.java           |  8 ++++----
 .../oap/server/core/cache/EndpointInventoryCache.java | 14 ++++++++++----
 .../core/cache/NetworkAddressInventoryCache.java      | 13 ++++++++++---
 .../core/cache/ServiceInstanceInventoryCache.java     | 19 ++++++++++++-------
 .../oap/server/core/cache/ServiceInventoryCache.java  | 16 ++++++++++++----
 6 files changed, 56 insertions(+), 22 deletions(-)

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java
index 1858116..e77d59c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java
@@ -58,6 +58,14 @@ public class CoreModuleConfig extends ModuleConfig {
      */
     @Setter private int remoteTimeout = 20;
 
+    /**
+     * Following are cache settings for inventory(s)
+     */
+    private long maxSizeOfServiceInventory = 10_000L;
+    private long maxSizeOfServiceInstanceInventory = 1_000_000L;
+    private long maxSizeOfEndpointInventory = 1_000_000L;
+    private long maxSizeOfNetworkInventory = 1_000_000L;
+
     CoreModuleConfig() {
         this.downsampling = new ArrayList<>();
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
index 3bc4e9a..9f58df6 100755
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java
@@ -141,16 +141,16 @@ public class CoreModuleProvider extends ModuleProvider {
         this.registerServiceImplementation(IModelGetter.class, storageModels);
         this.registerServiceImplementation(IModelOverride.class, storageModels);
 
-        this.registerServiceImplementation(ServiceInventoryCache.class, new ServiceInventoryCache(getManager()));
+        this.registerServiceImplementation(ServiceInventoryCache.class, new ServiceInventoryCache(getManager(), moduleConfig));
         this.registerServiceImplementation(IServiceInventoryRegister.class, new ServiceInventoryRegister(getManager()));
 
-        this.registerServiceImplementation(ServiceInstanceInventoryCache.class, new ServiceInstanceInventoryCache(getManager()));
+        this.registerServiceImplementation(ServiceInstanceInventoryCache.class, new ServiceInstanceInventoryCache(getManager(), moduleConfig));
         this.registerServiceImplementation(IServiceInstanceInventoryRegister.class, new ServiceInstanceInventoryRegister(getManager()));
 
-        this.registerServiceImplementation(EndpointInventoryCache.class, new EndpointInventoryCache(getManager()));
+        this.registerServiceImplementation(EndpointInventoryCache.class, new EndpointInventoryCache(getManager(), moduleConfig));
         this.registerServiceImplementation(IEndpointInventoryRegister.class, new EndpointInventoryRegister(getManager()));
 
-        this.registerServiceImplementation(NetworkAddressInventoryCache.class, new NetworkAddressInventoryCache(getManager()));
+        this.registerServiceImplementation(NetworkAddressInventoryCache.class, new NetworkAddressInventoryCache(getManager(), moduleConfig));
         this.registerServiceImplementation(INetworkAddressInventoryRegister.class, new NetworkAddressInventoryRegister(getManager()));
 
         this.registerServiceImplementation(TopologyQueryService.class, new TopologyQueryService(getManager()));
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java
index a7e7127..096a5d1 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/EndpointInventoryCache.java
@@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.core.cache;
 import com.google.common.cache.*;
 import java.util.Objects;
 import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.CoreModuleConfig;
 import org.apache.skywalking.oap.server.core.register.EndpointInventory;
 import org.apache.skywalking.oap.server.core.storage.StorageModule;
 import org.apache.skywalking.oap.server.core.storage.cache.IEndpointInventoryCacheDAO;
@@ -38,19 +39,24 @@ public class EndpointInventoryCache implements Service {
 
     private final ModuleManager moduleManager;
     private final EndpointInventory userEndpoint;
-    private final Cache<String, Integer> endpointNameCache = CacheBuilder.newBuilder().initialCapacity(5000).maximumSize(100000).build();
-
-    private final Cache<Integer, EndpointInventory> endpointIdCache = CacheBuilder.newBuilder().initialCapacity(5000).maximumSize(100000).build();
+    private final Cache<String, Integer> endpointNameCache;
+    private final Cache<Integer, EndpointInventory> endpointIdCache;
 
     private IEndpointInventoryCacheDAO cacheDAO;
 
-    public EndpointInventoryCache(ModuleManager moduleManager) {
+    public EndpointInventoryCache(ModuleManager moduleManager, CoreModuleConfig moduleConfig) {
         this.moduleManager = moduleManager;
 
         this.userEndpoint = new EndpointInventory();
         this.userEndpoint.setSequence(Const.USER_ENDPOINT_ID);
         this.userEndpoint.setName(Const.USER_CODE);
         this.userEndpoint.setServiceId(Const.USER_SERVICE_ID);
+
+        long initialSize = moduleConfig.getMaxSizeOfEndpointInventory() / 10L;
+        int initialCapacitySize = (int)(initialSize > Integer.MAX_VALUE ? Integer.MAX_VALUE : initialSize);
+
+        endpointNameCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfEndpointInventory()).build();
+        endpointIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfEndpointInventory()).build();
     }
 
     private IEndpointInventoryCacheDAO getCacheDAO() {
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/NetworkAddressInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/NetworkAddressInventoryCache.java
index 79ba73e..6a254c8 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/NetworkAddressInventoryCache.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/NetworkAddressInventoryCache.java
@@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.core.cache;
 import com.google.common.cache.*;
 import java.util.Objects;
 import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.CoreModuleConfig;
 import org.apache.skywalking.oap.server.core.register.NetworkAddressInventory;
 import org.apache.skywalking.oap.server.core.storage.StorageModule;
 import org.apache.skywalking.oap.server.core.storage.cache.INetworkAddressInventoryCacheDAO;
@@ -36,14 +37,20 @@ public class NetworkAddressInventoryCache implements Service {
 
     private static final Logger logger = LoggerFactory.getLogger(NetworkAddressInventoryCache.class);
 
-    private final Cache<String, Integer> networkAddressCache = CacheBuilder.newBuilder().initialCapacity(1000).maximumSize(5000).build();
-    private final Cache<Integer, NetworkAddressInventory> addressIdCache = CacheBuilder.newBuilder().initialCapacity(1000).maximumSize(5000).build();
+    private final Cache<String, Integer> networkAddressCache;
+    private final Cache<Integer, NetworkAddressInventory> addressIdCache;
 
     private final ModuleManager moduleManager;
     private INetworkAddressInventoryCacheDAO cacheDAO;
 
-    public NetworkAddressInventoryCache(ModuleManager moduleManager) {
+    public NetworkAddressInventoryCache(ModuleManager moduleManager, CoreModuleConfig moduleConfig) {
         this.moduleManager = moduleManager;
+
+        long initialSize = moduleConfig.getMaxSizeOfNetworkInventory() / 10L;
+        int initialCapacitySize = (int)(initialSize > Integer.MAX_VALUE ? Integer.MAX_VALUE : initialSize);
+
+        networkAddressCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfNetworkInventory()).build();
+        addressIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfNetworkInventory()).build();
     }
 
     private INetworkAddressInventoryCacheDAO getCacheDAO() {
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java
index c328e61..e37e947 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInstanceInventoryCache.java
@@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.core.cache;
 import com.google.common.cache.*;
 import java.util.Objects;
 import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.CoreModuleConfig;
 import org.apache.skywalking.oap.server.core.register.ServiceInstanceInventory;
 import org.apache.skywalking.oap.server.core.storage.StorageModule;
 import org.apache.skywalking.oap.server.core.storage.cache.IServiceInstanceInventoryCacheDAO;
@@ -38,16 +39,13 @@ public class ServiceInstanceInventoryCache implements Service {
     private static final Logger logger = LoggerFactory.getLogger(ServiceInstanceInventoryCache.class);
 
     private final ServiceInstanceInventory userServiceInstance;
-    private final Cache<Integer, ServiceInstanceInventory> serviceInstanceIdCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build();
-
-    private final Cache<String, Integer> serviceInstanceNameCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build();
-
-    private final Cache<String, Integer> addressIdCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build();
-
+    private final Cache<Integer, ServiceInstanceInventory> serviceInstanceIdCache;
+    private final Cache<String, Integer> serviceInstanceNameCache;
+    private final Cache<String, Integer> addressIdCache;
     private final ModuleManager moduleManager;
     private IServiceInstanceInventoryCacheDAO cacheDAO;
 
-    public ServiceInstanceInventoryCache(ModuleManager moduleManager) {
+    public ServiceInstanceInventoryCache(ModuleManager moduleManager, CoreModuleConfig moduleConfig) {
         this.moduleManager = moduleManager;
 
         this.userServiceInstance = new ServiceInstanceInventory();
@@ -55,6 +53,13 @@ public class ServiceInstanceInventoryCache implements Service {
         this.userServiceInstance.setName(Const.USER_CODE);
         this.userServiceInstance.setServiceId(Const.USER_SERVICE_ID);
         this.userServiceInstance.setIsAddress(BooleanUtils.FALSE);
+
+        long initialSize = moduleConfig.getMaxSizeOfServiceInstanceInventory() / 10L;
+        int initialCapacitySize = (int)(initialSize > Integer.MAX_VALUE ? Integer.MAX_VALUE : initialSize);
+
+        serviceInstanceIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInstanceInventory()).build();
+        serviceInstanceNameCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInstanceInventory()).build();
+        addressIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInstanceInventory()).build();
     }
 
     private IServiceInstanceInventoryCacheDAO getCacheDAO() {
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java
index a38cb2e..9bbebb8 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/ServiceInventoryCache.java
@@ -21,6 +21,7 @@ package org.apache.skywalking.oap.server.core.cache;
 import com.google.common.cache.*;
 import java.util.Objects;
 import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.CoreModuleConfig;
 import org.apache.skywalking.oap.server.core.register.ServiceInventory;
 import org.apache.skywalking.oap.server.core.storage.StorageModule;
 import org.apache.skywalking.oap.server.core.storage.cache.IServiceInventoryCacheDAO;
@@ -38,20 +39,27 @@ public class ServiceInventoryCache implements Service {
     private static final Logger logger = LoggerFactory.getLogger(ServiceInventoryCache.class);
 
     private final ServiceInventory userService;
-    private final Cache<String, Integer> serviceNameCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build();
-    private final Cache<String, Integer> addressIdCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build();
-    private final Cache<Integer, ServiceInventory> serviceIdCache = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build();
+    private final Cache<String, Integer> serviceNameCache;
+    private final Cache<String, Integer> addressIdCache;
+    private final Cache<Integer, ServiceInventory> serviceIdCache;
 
     private final ModuleManager moduleManager;
     private IServiceInventoryCacheDAO cacheDAO;
 
-    public ServiceInventoryCache(ModuleManager moduleManager) {
+    public ServiceInventoryCache(ModuleManager moduleManager, CoreModuleConfig moduleConfig) {
         this.moduleManager = moduleManager;
 
         this.userService = new ServiceInventory();
         this.userService.setSequence(Const.USER_SERVICE_ID);
         this.userService.setName(Const.USER_CODE);
         this.userService.setIsAddress(BooleanUtils.FALSE);
+
+        long initialSize = moduleConfig.getMaxSizeOfServiceInventory() / 10L;
+        int initialCapacitySize = (int)(initialSize > Integer.MAX_VALUE ? Integer.MAX_VALUE : initialSize);
+
+        serviceNameCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInventory()).build();
+        addressIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInventory()).build();
+        serviceIdCache = CacheBuilder.newBuilder().initialCapacity(initialCapacitySize).maximumSize(moduleConfig.getMaxSizeOfServiceInventory()).build();
     }
 
     private IServiceInventoryCacheDAO getCacheDAO() {