Anduin Xue
Anduin Xue

Anduin's Tech Blog

Featured Posts


微信的架构是如何实现分布式消息分发?

微信作为生活中不可或缺的通讯工具,其架构设计之巧妙令人称赞。本文探讨了微信如何通过分布式架构实现高效的消息分发。文章首先提出了一些关于微信的疑问,例如需要手机扫码登录PC端、切换设备后无法同步聊天记录等,然后通过深入分析微信的架构设计,解释了这些现象背后的原因。 文章提出,微信采用了分布式应用架构,其服务器遍布全球各地,没有中心化的服务器。为了实现分布式通讯,微信至少需要设计三个算法:服务器选择算法、服务器端切换算法和用户发现算法。这三个算法共同保证了用户能够快速定位到合适的微信服务器并进行通信。 分布式架构的设计带来了许多好处,例如运维上的便利、对单台服务器生命的弱化、国际化应用的支持等。此外,文章还通过类比Email的通信过程,解释了微信群聊、文件传输等功能的实现原理。 最后,文章指出许多产品经理可能无法理解微信架构设计的复杂性,而盲目模仿或吐槽微信的槽点。实际上,微信的设计非常精巧,为用户提供了高效便捷的通讯体验。然而,这种设计也存在一定的局限性,有些功能并非程序员脑残,而是数据结构本身无法支撑。因此,产品经理在设计产品时,需要更深入地了解技术架构,避免提出不切实际的需求。--GPT 4

Web WeChat Distributed Messging IM

EF second layer cache to enhance your SQL database performance based on Redis

本篇博客介绍了如何使用基于Redis的EF第二层缓存来提高SQL数据库性能。首先,安装`EFCoreSecondLevelCacheInterceptor`包,然后在`StartUp`类的`ConfigureServices`方法中进行相应的配置。这个缓存会在通过使用这个库的DbContext更改实体(插入、更新或删除)时更新。如果数据库通过其他方式(如存储过程或触发器)更新,缓存将变得过时。但是,如果我们的应用程序在多个实例中运行,数据库的更改可能不适用于其他实例,可能会导致许多问题。此时,我们需要使用Redis来存储缓存。 Redis是一种开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。本文介绍了三种安装Redis的方法,分别是在Redis官网下载安装、在Windows Server上安装及在Azure上创建Redis缓存实例。安装完成后,使用命令安装`EasyCaching.Redis`包,并修改`StartUp`方法以连接Redis数据库并使用Redis存储Entity-Framework Core的缓存,支持扩展。 此外,还需在`appsettings.json`文件中添加正确的Redis连接信息。这样,在启动过程中,应用程序将尝试连接到Redis数据库,并使用Redis缓存数据库结果。在不修改代码的情况下,ASP.NET Core应用程序的性能得到了极大的提升。Redis值得称赞! 那么,如何在多实例应用程序中保持可扩展性呢?使用Redis作为缓存存储是否足够满足我们的需求?在实际应用中,我们可能还需要关注其他性能优化策略。--GPT 4

ASP.NET Core C# SQL Server SQL Entity Framework Core Azure Redis Caching Cache

HTTP post file from .NET Core new HTTP client

随着.NET Core 3的发布,微软推出了一款全新的.NET Core HTTP客户端。新客户端使得调用WEB API变得更加简单。本文将介绍如何使用新客户端提交文件至服务器。 通常情况下,我们调用Web API时不需要提交二进制文件。但是在新客户端中,我们应该如何向服务器提交文件呢?首先,我们需要了解HTTP POST请求带文件与表单URL编码内容的不同之处。表单通过一些边界进行划分,边界名称在HTTP头部的内容类型中指定。 要从.NET Core HTTP客户端提交文件,可以使用`MultipartFormDataContent`,这样框架就可以处理多部分内容。然后,通过添加新的流内容将文件添加到表单中。此外,您还可以向表单中添加其他内容,如URL编码的内容。最后,提交表单。 本文提供的示例代码展示了如何使用新的HTTP客户端提交文件至服务器。在这个过程中,您可能会遇到一些有趣的问题,例如如何处理多个文件的上传,或者如何在提交文件的同时提交其他类型的数据。文章内容将引导您探索这些问题,并帮助您找到合适的解决方案。--GPT 4

ASP.NET Core C# .NET Core HTTP Web File HTTP Client POST

Get an ideal flight simulator free based on X-Plane 11 (Free plugins)

本文介绍了一款基于X-Plane 11的免费飞行模拟器,以及一系列免费插件,帮助玩家获得更加真实的飞行体验。首先,文章推荐了Zibo 737飞机模型,该模型具有高度真实的飞行性能和系统。接下来,文章介绍了一系列免费插件,包括AviTab、Terrain Radar、BetterPushBack、HeadShake camera plugin、XTouchDownRecorder、Airport Navigator、Xsquawkbox和X-RASS。这些插件分别提供了平板电脑式的航图显示、地形雷达功能、自动推出系统、摄像头抖动效果、着陆评分记录、机场导航、在线飞行模拟网络和跑道警告系统等功能。通过这些插件,玩家可以获得更加真实、细腻的飞行体验。那么,这些插件是否能满足您对飞行模拟器的需求呢?快来一探究竟吧!--GPT 4

X-Plane Flight simulation Flight Plugins Plane Configuration Free

Tips to get better performance for Entity Framework Core

在这篇博客中,我们将探讨如何优化Entity Framework Core的性能。首先,当构建查询时,如果不需要查询中的所有内容,请使用IQueryable编写代码。如果查询已经构建完毕,且所有查询内容都是必要的,请立即将其转换为列表以避免进一步的IO操作。其次,当查询主键时,使用FirstOrDefault替换SingleOrDefault。由于SingleOrDefaultAsync会转换为“top 2”,而FirstOrDefaultAsync会转换为“top 1”,在主键查询中使用FirstOrDefault可以提高性能。 此外,如果不需要保存更改,请考虑添加AsNoTracking以提高查询性能。同时,尽量避免使用Include,因为它会生成复杂的SQL查询。只选择所需的数据,避免编写Include函数。当使用Select时,也可以省略.Include,因为它在这里不会产生任何效果。 最后,避免客户端评估,因为它会使EF从数据库查询所有数据,速度较慢。例如,在处理DateTime或TimeSpan的复杂计算时,先在代码中计算时间,然后构建查询。遵循这些建议,可以有效地提高Entity Framework Core的性能。 在优化Entity Framework Core性能的过程中,你是否遇到过其他问题?尝试过哪些方法来提高查询性能?请在阅读全文后与我们分享您的经验和看法。--GPT 4

Entity Framework SQL Performance Database