WawaKM随笔同步服务端架构设计初稿
WawaKM随笔同步服务端采用Java架构,服务端用Servlet技术,来接受客户端的协议请求,协议请求支持json,web服务和自定义xml格式。json是为Ajax客户端服务,Ajax客户端用YahooUI,Google Gears来做。web服务形式是让c#等智能客户端用的,调用方面会简化一些,xml格式的命令客户端要根据协议自行解析,是标准协议,由第三方合作伙伴做接口用,我们会根据同步相关用例定义一套标准的用XML描述的协议,叫KMS协议。客户端除了Ajax客户端还有c#客户端,c#客户端会做为标准的客户端来实现,做为一个示例,源码会公开,其中会使用KMS标准协议。python客户端是为了让非windows用户使用的胖客户端,delphi是一个纯win32客户端,用来弥补c#客户端占用内存大的不足,Ajax客户端用在客户不想安装客户端软件的情况下,但如安装了gears可以使用离线功能。手机客户端暂时不考虑,到时候再把标准XML协议WBXML+SYNCML适配一下。
接入层用由WSAdapter,XMLAdapter和JSONAdapter来提供给客户端调用,CommandParser组件用来解析用户的请求,这里会有一个系列的Parser类,分别解析不同协议的输入,由工厂来生成。ResponseBuilder用来把java的实体类转换成给客户端的响应格式(xml,json等),也由抽象工厂生成。SyncCommandStack是KMS的协议栈,定义命令的一些实体类。
SSO用来让客户端实现身份验证,包括登陆、注销和保持登陆,这里用微软的live id和google的认证服务做适配,大家可以用MSN帐户或GMAIL帐户来登陆系统,也可以注册我们的会员来登陆,到时候会以一致的界面对待用户。TokenCleaner用来清理超时用户票证,用户通过身份验证后会在mysql里保存用户本地登陆的凭证,并把凭证返回给客户端,客户端下次发送请求,服务端会验证客户端的凭证是否存在,当然同时会验证客户端的IP是否是创建凭证的IP,并更新服务端缓存凭证的存活时间,如果一段时间内客户端没有任何请求,服务端将清理缓存的凭证,用户下次请求就会被通知重新登陆了。当然协议里会有保持登陆的信令。
安全控制服务用来防止用户恶意攻击,比如说某一IP短时间内发送大量的登陆信令,安全控制服务会把这个IP禁止掉,直接返回403错误码,协议不会路由到后端服务。当然安全控制服务的规则和用例一户会细化。
管理系统一个web portal,用来对用户进行管理,比如禁止用户,添加敏感词过滤条目,查看日志等。
监控系统用来监控服务端的运行状况,以旁路监听的方式注入到核心服务组件,可以查看系统每秒上行的流量和下行的流量大小,每秒处理的请求数,每秒失败的事务数,当前在线的用户数等。具体和服务端的交互方式还没考虑清楚,用rmi或自己写socket接口。可惜的是java里没有找到使用windows性能计数器的组件,或许性能计数组件要自己实现。想用JNI调用win32 api实现但不知道会不会有性能问题,自己用java实现吧,看了看.net类库里性能计数器的实现代码,被一大罗抽样算法给吓回来了,真希望java有人实现了性能计数器组件。
KMSyncManager用来实现主要的业务逻辑,接入层解析命令后会把操作权转给它,它来实现逻辑,并使用数据库访问层操作数据库。
数据库访问层用Privoder模式来做,以后方便从mysql数据库切换到其它数据库,数据库访问层可能会根据性能需要用OSCache做一个缓存层。
底层的Servlet容器用Tomcat,目前还没有想到必须用Apache和JBOOS的需求。
公共组件会用一些开源的类库,velocity会被ResponseBuilder来输出XML协议给客户端,log4j用来记录日志,dom4j被CommandParser用来解析用户提交的XML命令,json-lib用来解析和生成用户的json格式的请求和响应。
最后整个系统是个无状态的系统,以后整个接入层可以很简单的实现负载均衡来缓解压力,当然SSO那里还保存着客户端登陆的身份票证,SSO做为全局的,再说SSO的凭证还在mysql里保存,所以不会有问题。如果以后db压力特别大的话先用mysql的Master/Slave技术来把数据库进行拆分,拆分的原则是根据用户的ID范围进行拆分,比如1-100之间的一个数据库,100-200一个数据库。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2006-08-14 【蛙蛙推荐】MyService网站策划
2006-08-14 【蛙蛙推荐】DotNet企业开发示例程序