From 4a77986b916ef810cd7555eeba892c0538fe25f9 Mon Sep 17 00:00:00 2001 From: peng-yongsheng <8082209@qq.com> Date: Wed, 1 Nov 2017 20:37:02 +0800 Subject: [PATCH] Add cache service --- apm-collector/apm-collector-cache/pom.xml | 12 +++ .../apm/collector/cache/ApplicationCache.java | 78 +++++++++++++++++++ .../apm/collector/cache/InstanceCache.java | 55 +++++++++++++ .../apm/collector/cache/ServiceIdCache.java | 57 ++++++++++++++ .../apm/collector/cache/ServiceNameCache.java | 72 +++++++++++++++++ 5 files changed, 274 insertions(+) create mode 100644 apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java create mode 100644 apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java create mode 100644 apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java create mode 100644 apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java diff --git a/apm-collector/apm-collector-cache/pom.xml b/apm-collector/apm-collector-cache/pom.xml index 5bc4af1598..e901f5e278 100644 --- a/apm-collector/apm-collector-cache/pom.xml +++ b/apm-collector/apm-collector-cache/pom.xml @@ -12,4 +12,16 @@ apm-collector-cache jar + + + org.skywalking + apm-collector-core + ${project.version} + + + org.skywalking + collector-storage-define + ${project.version} + + \ No newline at end of file diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java new file mode 100644 index 0000000000..cbf2357692 --- /dev/null +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ApplicationCache.java @@ -0,0 +1,78 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.cache; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.StringUtils; +import org.skywalking.apm.collector.storage.base.dao.DAOContainer; +import org.skywalking.apm.collector.storage.dao.IApplicationCacheDAO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author peng-yongsheng + */ +public class ApplicationCache { + + private static final Logger logger = LoggerFactory.getLogger(ApplicationCache.class); + + private static Cache CODE_CACHE = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(1000).build(); + + public static int get(String applicationCode) { + IApplicationCacheDAO dao = (IApplicationCacheDAO)DAOContainer.INSTANCE.get(IApplicationCacheDAO.class.getName()); + + int applicationId = 0; + try { + applicationId = CODE_CACHE.get(applicationCode, () -> dao.getApplicationId(applicationCode)); + } catch (Throwable e) { + logger.error(e.getMessage(), e); + } + + if (applicationId == 0) { + applicationId = dao.getApplicationId(applicationCode); + if (applicationId != 0) { + CODE_CACHE.put(applicationCode, applicationId); + } + } + return applicationId; + } + + private static Cache ID_CACHE = CacheBuilder.newBuilder().maximumSize(1000).build(); + + public static String get(int applicationId) { + IApplicationCacheDAO dao = (IApplicationCacheDAO)DAOContainer.INSTANCE.get(IApplicationCacheDAO.class.getName()); + + String applicationCode = Const.EMPTY_STRING; + try { + applicationCode = ID_CACHE.get(applicationId, () -> dao.getApplicationCode(applicationId)); + } catch (Throwable e) { + logger.error(e.getMessage(), e); + } + + if (StringUtils.isEmpty(applicationCode)) { + applicationCode = dao.getApplicationCode(applicationId); + if (StringUtils.isNotEmpty(applicationCode)) { + CODE_CACHE.put(applicationCode, applicationId); + } + } + return applicationCode; + } +} diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java new file mode 100644 index 0000000000..07a818dbcc --- /dev/null +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/InstanceCache.java @@ -0,0 +1,55 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.cache; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import org.skywalking.apm.collector.storage.base.dao.DAOContainer; +import org.skywalking.apm.collector.storage.dao.IInstanceCacheDAO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author peng-yongsheng + */ +public class InstanceCache { + + private static final Logger logger = LoggerFactory.getLogger(InstanceCache.class); + + private static Cache INSTANCE_CACHE = CacheBuilder.newBuilder().initialCapacity(100).maximumSize(5000).build(); + + public static int get(int applicationInstanceId) { + IInstanceCacheDAO dao = (IInstanceCacheDAO)DAOContainer.INSTANCE.get(IInstanceCacheDAO.class.getName()); + + int applicationId = 0; + try { + applicationId = INSTANCE_CACHE.get(applicationInstanceId, () -> dao.getApplicationId(applicationInstanceId)); + } catch (Throwable e) { + logger.error(e.getMessage(), e); + } + + if (applicationId == 0) { + applicationId = dao.getApplicationId(applicationInstanceId); + if (applicationId != 0) { + INSTANCE_CACHE.put(applicationInstanceId, applicationId); + } + } + return applicationId; + } +} diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java new file mode 100644 index 0000000000..14f1d5a46b --- /dev/null +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceIdCache.java @@ -0,0 +1,57 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.cache; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.storage.base.dao.DAOContainer; +import org.skywalking.apm.collector.storage.dao.IServiceNameCacheDAO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author peng-yongsheng + */ +public class ServiceIdCache { + + private static final Logger logger = LoggerFactory.getLogger(ServiceIdCache.class); + + //TODO size configuration + private static Cache SERVICE_CACHE = CacheBuilder.newBuilder().maximumSize(1000).build(); + + public static int get(int applicationId, String serviceName) { + IServiceNameCacheDAO dao = (IServiceNameCacheDAO)DAOContainer.INSTANCE.get(IServiceNameCacheDAO.class.getName()); + + int serviceId = 0; + try { + serviceId = SERVICE_CACHE.get(applicationId + Const.ID_SPLIT + serviceName, () -> dao.getServiceId(applicationId, serviceName)); + } catch (Throwable e) { + logger.error(e.getMessage(), e); + } + + if (serviceId == 0) { + serviceId = dao.getServiceId(applicationId, serviceName); + if (serviceId != 0) { + SERVICE_CACHE.put(applicationId + Const.ID_SPLIT + serviceName, serviceId); + } + } + return serviceId; + } +} diff --git a/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java new file mode 100644 index 0000000000..528f783c8d --- /dev/null +++ b/apm-collector/apm-collector-cache/src/main/java/org/skywalking/apm/collector/cache/ServiceNameCache.java @@ -0,0 +1,72 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.collector.cache; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import org.skywalking.apm.collector.core.util.Const; +import org.skywalking.apm.collector.core.util.StringUtils; +import org.skywalking.apm.collector.storage.base.dao.DAOContainer; +import org.skywalking.apm.collector.storage.dao.IServiceNameCacheDAO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author peng-yongsheng + */ +public class ServiceNameCache { + + private static final Logger logger = LoggerFactory.getLogger(ServiceNameCache.class); + + //TODO size configuration + private static Cache CACHE = CacheBuilder.newBuilder().maximumSize(10000).build(); + + public static String get(int serviceId) { + IServiceNameCacheDAO dao = (IServiceNameCacheDAO)DAOContainer.INSTANCE.get(IServiceNameCacheDAO.class.getName()); + + String serviceName = Const.EMPTY_STRING; + try { + serviceName = CACHE.get(serviceId, () -> dao.getServiceName(serviceId)); + } catch (Throwable e) { + logger.error(e.getMessage(), e); + } + + if (StringUtils.isEmpty(serviceName)) { + serviceName = dao.getServiceName(serviceId); + if (StringUtils.isNotEmpty(serviceName)) { + CACHE.put(serviceId, serviceName); + } + } + + return serviceName; + } + + public static String getSplitServiceName(String serviceName) { + if (StringUtils.isNotEmpty(serviceName)) { + String[] serviceNames = serviceName.split(Const.ID_SPLIT); + if (serviceNames.length == 2) { + return serviceNames[1]; + } else { + return Const.EMPTY_STRING; + } + } else { + return Const.EMPTY_STRING; + } + } +} -- GitLab