Web 服务、中央日志的架构设计建议
Web services, architectural design advice for central logging
我们有一定数量的SOAP和REST Web服务,为客户提供法律信息。管理要求记录此服务请求的所有信息。他们希望使用日志来收集统计数据并向客户收费。
我的同事提议使用中央关系数据库进行日志记录。
我不喜欢这个解决方案,因为服务的数量在增长,我认为这样的架构将成为生产力的瓶颈。
你能告诉我哪种架构设计适合此类任务吗?
当您说中央数据库将成为瓶颈时,您的意思是它太慢而无法跟上日志记录请求吗?或者您是说您希望针对每种日志记录请求类型更改数据库?
我会为日志定义一个更通用的有效负载(找出您的最小标准化字段),然后为这些日志创建一个数据库。
<log><loglevel>INFO</loglevel><systemName>ClientValueActualizer</systemName><userIp>123.123.123.432</userIp><logpayload><![CDATA[useful payload for billing]]</logpayload></log>
如果你担心容量,你可以在它前面放一个队列,这样的好处是在日志繁忙时不会让客户端陷入困境。
您可以将这些消息的使用分离到单独的系统中。每个都可以理解各种有效载荷。这里的风险是如果你想添加新的属性,将很难控制什么系统发送什么。但这只是解耦服务的普遍问题。
您可以将 Apache Kafka 视为分布式提交日志。这有利于提高性能,因为它可以水平扩展,并且只有在客户端拉取这些消息时才能传递消息。
我们有一定数量的SOAP和REST Web服务,为客户提供法律信息。管理要求记录此服务请求的所有信息。他们希望使用日志来收集统计数据并向客户收费。
我的同事提议使用中央关系数据库进行日志记录。 我不喜欢这个解决方案,因为服务的数量在增长,我认为这样的架构将成为生产力的瓶颈。
你能告诉我哪种架构设计适合此类任务吗?
当您说中央数据库将成为瓶颈时,您的意思是它太慢而无法跟上日志记录请求吗?或者您是说您希望针对每种日志记录请求类型更改数据库?
我会为日志定义一个更通用的有效负载(找出您的最小标准化字段),然后为这些日志创建一个数据库。
<log><loglevel>INFO</loglevel><systemName>ClientValueActualizer</systemName><userIp>123.123.123.432</userIp><logpayload><![CDATA[useful payload for billing]]</logpayload></log>
如果你担心容量,你可以在它前面放一个队列,这样的好处是在日志繁忙时不会让客户端陷入困境。
您可以将这些消息的使用分离到单独的系统中。每个都可以理解各种有效载荷。这里的风险是如果你想添加新的属性,将很难控制什么系统发送什么。但这只是解耦服务的普遍问题。
您可以将 Apache Kafka 视为分布式提交日志。这有利于提高性能,因为它可以水平扩展,并且只有在客户端拉取这些消息时才能传递消息。