java - 优化事件处理
问题描述
我在我的 java 服务器组件中使用 Oracle 的 Coherence 缓存。我正在使用以下事件处理程序订阅和收听缓存更改事件:
public void entryUpdated(MapEvent mapEvent)
{
processUpdateEvent(mapEvent);
}
public void entryDeleted(MapEvent mapEvent)
{
//processDeleteEvent(mapEvent);
}
public void entryInserted(MapEvent mapEvent)
{
processInsertEvent(mapEvent);
}
有时,我们会在缓存中获得大量“更新”事件流(“删除”或“插入”事件的数量非常少)......而且我们当前的 Java 代码似乎没有足够的可扩展性来处理这个问题设想。因此,它在事件处理方面落后了。
我正在尝试重新设计和优化此代码。
我想到的一件事是使用以下方法。但我认为这没有意义,因为它会为每个新事件启动新线程,这将再次降低服务器的整体性能。请问还有其他方法可以优化此代码吗?
Thread thread = new Thread(new Runnable() {
public void run() {
processUpdateEvent();
}
});
thread.start();
谢谢。
解决方案
一致性侦听器与单个线程一起工作,因此唯一可能的解决方案是将事件进程委托给另一个线程并尽快让侦听器线程空闲。
优化事件驱动架构的可能解决方案要求您进行架构更改:您可以在数据存储节点上注册拦截器并将事件写入主题 kafka。这样,每个拦截器将只处理部分事件(仅在同一数据存储节点中创建的事件),并且您的 Kafka 消费者池可以配置为高性能和高可用性。
一致性侦听器方法的另一个风险是您无法获得集群客户端和高可用客户端。
推荐阅读
- java - 类文件版本 57.0,此版本的 Java 运行时仅识别最高 52.0 的类文件版本
- youtube - 如何以编程方式在 YouTube 上投放广告?
- kubernetes - 为什么我可以通过 minikube 中的 ClusterIP 访问我的 Kubernetes 部署的应用程序?
- android - Android 上的 Freemarker GAE
- amazon-web-services - Terraform / Terragrunt 移除状态实际上并不移除状态
- php - 将 SQL 查询的输出值与数字进行比较
- python - Python 与文件 (xlsx) 的交互,其路径由在 Windows 或 MacOS 中工作的用户设置
- c# - 这是在 MVC5 IdentityServer 客户端应用程序中实现空闲超时的好方法吗?
- c - SDL_RenderDrawRect 少了一个像素
- list - 以某种顺序选择列表的元素并使用 R 存储在列表中