我们正在使用 DynamoDB 全局表并计划在 DynamoDB 的顶部使用 DAX 来启用缓存。但我没有看到任何关于 DAX 失效将如何在多区域设置中发生的提及。
例如,假设有 2 个集群,一个在 us-west-2 中,一个在 us-east-2 中。如果我们使用 DAX 客户端更新 us-east-2 中的某些内容,它的缓存将被更新,但是在将数据复制到 us-west-2 时,全局表更新缓存也会在 us-west-2 中吗?我在DynamoDB 文档中没有看到任何提及。
我根据AWS的教程创建了一个集群,它应该工作得很好但是当我尝试连接到它时,我收到以下错误
java.io.IOException异常:未能从配置主机集群端点:[mydaxcluster.ximfba.clustercfg.dax.use1.cache.amazonaws.com:8111]在com.amazon.dax.client.cluster.Source $ AutoconfSource.pull( com.amazon.dax.client.cluster.Source $ AutoconfSource.update(Source.java:60)〜[DaxJavaClient-latest.jar:1.0:Source.java:128)~ [DaxJavaClient-latest.jar:1.0.792.0] .792.0]在com.amazon.dax.client.cluster.Cluster的com.amazon.dax.client.cluster.Source $ AutoconfSource.refresh(Source.java:51)〜[DaxJavaClient-latest.jar:1.0.792.0] .REFRESH(Cluster.java:311)〜[DaxJavaClient-latest.jar:1.0.792.0]在com.amazon.dax.client.cluster.Cluster.refresh(Cluster.java:294)〜[DaxJavaClient-latest.jar: 1.0.792.0]在com.amazon.dax.client.cluster.Cluster.startup(Cluster.java:191)〜[DaxJavaClient-latest.jar:1.0.792.0]在com.amazon.dax.client.cluster.Cluster.在com.amazon.dax.client.dynamodbv2.ClusterDaxClient启动(Cluster.java:143)〜[DaxJavaClient-latest.jar:1.0.792.0].(ClusterDaxClient.java:159)[DaxJavaClien 在com.poc.dynamo.controller的com.amazon.dax.client.dynamodbv2.ClusterDaxClient.(ClusterDaxClient.java:130)[DaxJavaClient-latest.jar:1.0.792.0]的t-latest.jar:1.0.792.0]. DataController.testDax(DataController.java:190)[classes /:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1.8.0_121] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62 )〜[na:1.8.0_121] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.8.0_121] at java.lang.reflect.Method.invoke(Method.java:498)〜 [na:1.8.0_121] org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)org中的[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE].在org.springframework.web.servlet.mvc.method上的springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE]. annotation.ServletInvocableHandlerMethod.invokeAndHandle(SER vletInvocableHandlerMethod.java:116)[spring-webmvc-4.3.6.RELEASE.jar:4.3.6.RELEASE] org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) [spring-webmvc-4.3.6.RELEASE.jar:4.3.6.RELEASE]在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)[chring-webmvc- 4.3 .6.RELEASE.jar:4.3.6.RELEASE] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)[spring-webmvc-4.3.6.RELEASE.jar:4.3 .6.RELEASE]在org.springframework.web上的org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)[spring-webmvc-4.3.6.RELEASE.jar:4.3.6.RELEASE]. servlet.DispatcherServlet.doService(DispatcherServlet.java:897)[spring-webmvc-4.3.6.RELEASE.jar:4.3.6.RELEASE] org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.jav)一:970)[弹簧webmvc-4.3.6.RELEASE.jar:4.3.6.RELEASE]在org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)[弹簧webmvc-4.3.6 .RELEASE.jar:4.3.6.RELEASE]在org.springframework的javax.servlet.http.HttpServlet.service(HttpServlet.java:648)[tomcat-embed-core-8.5.11.jar:8.5.11]. web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)[spring-webmvc-4.3.6.RELEASE.jar:4.3.6.RELEASE],位于javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [tomcat-embed-core-8.5.11.jar:8.5.11]在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)[tomcat-embed-core-8.5.11.jar:8.5 .11]在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[tomcat-embed-core-8.5.11.jar:8.5.11] org.apache.tomcat.websocket.server. WsFilter.doFilter(WsFilter.java:52)[Tomcat的嵌入-的WebSocket-8.5.11.jar:8.5.11]在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilter Chain.java:192)[tomcat-embed-core-8.5.11.jar:8.5.11] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[tomcat-embed-core-8.5 .11.jar:8.5.11]在org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)[spring-boot-1.5.1.RELEASE.jar:1.5.1.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:192)[tomcat-embed-core-8.5.11.jar:8.5.11] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[tomcat-embed-core-8.5 .11.jar:8.5.11]在org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:108)[spring-boot-actuator-1.5.1.RELEASE.jar:1.5.1.RELEASE ] org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)[tomcat-embed-core -8.5.11.jar:8.5.11]在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[Tomcat的嵌入芯-8.5.11.jar:8.5.11]在有机springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter. java:107)[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)[tomcat-embed-core-8.5 .11.jar:8.5.11]在org.apringframework上的org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[tomcat-embed-core-8.5.11.jar:8.5.11]. web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFil ter.java:105)[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3 .6.RELEASE.jar:4.3.6.RELEASE]在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)[Tomcat的嵌入芯-8.5.11.jar:8.5.11]在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[tomcat-embed-core-8.5.11.jar:8.5.11] at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter. java:81)[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.6 .RELEASE.jar:4.3.6.RELEASE]在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)[tomcat-embed-core-8.5.11.jar:8.5.11]. apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[tomcat- embed-core-8.5.11.jar:8.5.11] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)[spring-web-4.3.6.RELEASE.jar:4.3.6.发布在org.apache.catalina.core.ApplicationFilterChain的org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)[spring-web-4.3.6.RELEASE.jar:4.3.6.RELEASE] .internalDoFilter(ApplicationFilterChain.java:192)[tomcat-embed-core-8.5.11.jar:8.5.11]在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[tomcat-embed- core-8.5.11.jar:8.5.11] at …
java cluster-computing amazon-web-services amazon-dynamodb amazon-dynamodb-dax
我设置了一个似乎有用的DAX集群.我可以通过telnet连接到它.
这是我的脚本中与DynamoDB一起使用的部分
dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
Run Code Online (Sandbox Code Playgroud)
但它我只添加了DAX端点
dynamodb = boto3.resource('dynamodb', region_name='us-east-1',
endpoint_url='dax-test.awj2jy.clustercfg.dax.use1.cache.amazonaws.com:8111'
)
Run Code Online (Sandbox Code Playgroud)
脚本失败
Traceback (most recent call last):
File "get.py", line 25, in <module>
endpoint_url='dax-test.awj2jy.clustercfg.dax.use1.cache.amazonaws.com:8111'
File "/home/ubuntu/dax/lib/python3.5/site-packages/boto3/__init__.py", line 92, in resource
return _get_default_session().resource(*args, **kwargs)
File "/home/ubuntu/dax/lib/python3.5/site-packages/boto3/session.py", line 389, in resource
aws_session_token=aws_session_token, config=config)
File "/home/ubuntu/dax/lib/python3.5/site-packages/boto3/session.py", line 263, in client
aws_session_token=aws_session_token, config=config)
File "/home/ubuntu/dax/lib/python3.5/site-packages/botocore/session.py", line 836, in create_client
client_config=config, api_version=api_version)
File "/home/ubuntu/dax/lib/python3.5/site-packages/botocore/client.py", line 71, in create_client
verify, credentials, scoped_config, client_config, endpoint_bridge)
File "/home/ubuntu/dax/lib/python3.5/site-packages/botocore/client.py", line 281, in _get_client_args
verify, credentials, scoped_config, client_config, …
我正在尝试使用以下代码从localhost连接到DAX:
ClientConfig daxConfig = new ClientConfig()
.withEndpoints("dax-cluster.yhdqu5.clustercfg.dax.use1.cache.amazonaws.com:8111");
AmazonDaxClient client = new ClusterDaxClient(daxConfig);
Run Code Online (Sandbox Code Playgroud)
群集已启动并运行,我已在公共子网中创建它并在安全组中打开了端口8111,但尽管如此,我还是收到以下异常:
Caused by: java.io.IOException: No endpoints available
at com.amazon.dax.client.cluster.Cluster.leaderClient(Cluster.java:560)
at com.amazon.dax.client.dynamodbv2.ClusterDaxClient$3.getClient(ClusterDaxClient.java:154)
at com.amazon.dax.client.dynamodbv2.ClusterDaxClient$RetryHandler.makeRequestWithRetries(ClusterDaxClient.java:632)
... 10 more
Suppressed: java.io.IOException: No endpoints available
... 13 more
Suppressed: java.io.IOException: No endpoints available
... 13 more
Run Code Online (Sandbox Code Playgroud)
StackOverflow上的其他答案表明这可能是由错误配置的安全组引起的,并且为了测试它我在相同的VPC /子网中启动了一个实例并使用了相同的安全组,我能够ssh到这个主机(22和安全组中打开了8111-st端口).所以应该有一些其他DAX相关的原因.
我的机器上的防火墙已关闭.
但如果我ssh到EC2中的一台机器,那么我可以连接到DAX集群:
[ec2-user@ip-10-0-0-44 ~]$ nc -z dax-cluster.yhdqu5.clustercfg.dax.use1.cache.amazonaws.com 8111
Connection to dax-cluster.yhdqu5.clustercfg.dax.use1.cache.amazonaws.com 8111 port [tcp/*] succeeded!
Run Code Online (Sandbox Code Playgroud) 我有一个用例,我在 Dynamo 数据库中的两个表(即事务中的 t1 和 t2)中写入数据。我的应用程序需要多次从这些表中读取数据(1 次写入,至少 4 次读取)。我正在考虑 DAX 与 Elastic Cache。有人有什么建议吗?提前致谢K
我最近开始在我的节点 lambda 函数中使用 dynamodb dax,但是使用“amazon-dax-client”框架,我无法再通过框架发出的 http 请求透明地捕获,如下所示;
const AWS = AWSXRay.captureAWS(require('aws-sdk'));
const dynamoDB = AWSXRay.captureAWSClient(new AWS.DynamoDB(defaults.db.config));Run Code Online (Sandbox Code Playgroud)
我知道我可以创建异步捕获。但我想知道是否有更好的方法来做到这一点,就像以前的方法一样,以及我是否有人设法捕获使用 dax-client 发出的请求,其方式与使用 aws 框架的 dynamo 客户端相同。