我在AWS Lambda中使用Python和Flask创建了一个非常简单的Web服务(Service A)。该服务接收请求并执行DynamoDB查询,然后返回结果。DynamoDB具有按需容量,在几乎所有情况下都返回1个结果。
我使用以下函数执行查询:
class DynamoDB:
def __init__( self ):
session = boto3.Session( )
self.dynamodb = session.resource( 'dynamodb' )
def query( self, table_name, **kwargs ):
# Selected Table
table = self.dynamodb.Table( table_name )
# Request to table
response = table.query( **kwargs )
return response
查询表达式
"#user_id = :user_id and begins_with( #sort_key, :sort_key)"
响应大小约为400B
我遇到了一些性能问题,例如单个请求需要1040ms,并且使用AWS Lambda Memory为128MB和最大内存使用量为95-100 MB。除了DynamoDB查询消耗的4ms之外,所有时间都被消耗。
以下是当我增加内存时的响应时间。
128 MB -> 1040 ms
512 MB -> 520 ms
1024 MB -> 210 ms
现在我有一个使用Python、Flask、Pandas和PyODBC的AWS Lambda中的另一个Web服务(Service B)。该服务接收请求并向未托管在AWS上的MSSQL服务器执行两个简单的查询,然后返回结果。该服务有128MB的内存,并且最大使用内存为128MB(占据了所有的内存)。对于单个请求,该服务的响应时间为500毫秒。
有人能解释一下这是如何可能的吗?
是否有任何解决方案可以使Service A中的查询更快?