小编Pra*_*tic的帖子

如何在Azure数据湖分析和Azure Databricks之间进行选择

Azure数据湖分析和azure数据库都可用于批处理.有谁可以帮我理解何时选择一个而不是另一个?

azure-data-lake azure-analysis-services

20
推荐指数
2
解决办法
5368
查看次数

负载均衡器如何在RabbitMQ中工作

我是RabbitMQ的新手,所以请原谅我的琐碎问题:

1)如果在RabbitMQ中进行集群,如果节点发生故障,则加载转移到另一个节点(不停止其他节点).同样,我们也可以在不停止集群中的现有节点的情况下向现有集群添加新的新节点.那是对的吗?

2)假设我们从一个rabbitMQ节点开始,并在其上创建100个队列.现在,制作人开始以更快的速度发送消息 要处理此负载,我们会添加更多节点并创建一个集群.但队列仅存在于第一个节点上.现在节点之间的负载如何平衡?如果我们需要添加更多队列,我们​​应该在哪个节点添加它们?或者我们可以使用负载均衡器添加它们.

提前致谢

load-balancing rabbitmq

16
推荐指数
1
解决办法
2万
查看次数

缓存失效策略

在我目前的申请中,我们正在处理一些很少改变的信息.对于性能优化,我们希望将它们存储在缓存中.但问题是在更新这些对象时无效.我们还没有最终确定缓存产品.当我们在Azure上构建此应用程序时,我们可能会使用"Azure redis缓存".一种策略可能是在"更新API"中添加代码,这将使缓存中的对象无效.我不确定这是否干净.我们不希望根据时间使用缓存过期.你能否建议一些其他用于缓存失效的策略?

caching redis

16
推荐指数
1
解决办法
9603
查看次数

异步等待增加上下文切换

我知道异步等待是如何工作的.我知道当执行到达等待时,它释放线程并在IO完成后,它从线程池中获取线程并运行剩余的代码.这样就可以有效地利用线程.但我在一些用例中感到困惑:

  1. 我们是否应该使用异步方法来实现非常快速的IO方法,比如缓存读/写方法?它们不会导致不必要的上下文切换.如果我们使用sync方法,则执行将在同一线程上完成,并且上下文切换可能不会发生.
  2. Async-await是否仅保存内存消耗(通过创建较少的线程).或者它也节省了CPU?据我所知,在同步IO的情况下,当IO发生时,线程进入睡眠模式.这意味着它不消耗CPU.这种理解是否正确?

c# multithreading asynchronous async-await

15
推荐指数
2
解决办法
4142
查看次数

如何在微服务中跨服务执行验证

假设有两个微服务:订单和库存.还有就是为了服务,它的API ProductId,Qty等,并下订单.

理想情况下,如果库存服务中存在库存,则只允许下订单.人们建议使用Saga模式或任何其他分布式交易.这很好,最终将利用一致性.

但是如果有人想滥用这个系统怎么办呢.他可以推销ProductId无效或库存不足的产品订单.系统将接受所有这些订单并将这些订单放入队列,库存服务将处理这些无效订单.

不应该事先处理(在订购服务中)而不是将这些无效订单推送到下一级别(特别是在productId无效的情况下)

处理这些方案有哪些建议?

domain-driven-design microservices

10
推荐指数
1
解决办法
2157
查看次数

在转移到与调用者相同的线程之前,await是否在内部创建另一个线程(对于UI应用程序)

我对async/await的了解是,当任务完成时,继续在调用await时在相同的上下文中运行,在我的例子中,这将是UI线程.但我的问题是,在IO完成之后和移动到同一个UI线程之前,它是否在内部创建了一个新线程.

我正在分享一段代码.如果我单击此按钮一次,它会在执行await之前显示可用线程为1023,但在此之后,可用线程将下降到1022.虽然当我检查线程ID时,它与UI线程相同.

    private async void button1_ClickAsync(object sender, EventArgs e)
    {
        int x, y;
        ThreadPool.GetAvailableThreads(out x, out y);
        textBox1.Text = x.ToString()+"..."+y.ToString();
        await Task.Delay(5000);
        ThreadPool.GetAvailableThreads(out x, out y);
        textBox1.Text = x.ToString() + "..." + y.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

但有趣的是,下次单击此按钮时,可用线程数仍为1023(等待之前和之后).

c# multithreading asynchronous async-await

8
推荐指数
1
解决办法
618
查看次数

如何将OMS用于Azure Web应用程序

我想探索Azure webApps的OMS(特别是Service Map),但它显示以下错误:"为了将服务器安装到服务映射,需要在由OMS监视的服务器上安装Microsoft Dependency Agent.可以被找寻到".

Alos,微软声称"监控服务"用于查看多个订阅,资源组等的数据.但是当我查看指标时,它需要"资源名称".虽然评论说'选择或所有资源',但它没有提供选择全部的选项.

monitoring azure azure-log-analytics

8
推荐指数
1
解决办法
691
查看次数

从c#到SQL Server的批量插入策略

在我们当前的项目中,客户将向我们的系统发送复杂/嵌套消息的集合.这些消息的频率约为.1000-2000 msg /每秒.

这些复杂对象包含事务数据(要添加)以及主数据(如果未找到则将添加).但客户不是传递主数据的ID,而是传递"名称"列.

系统检查这些名称是否存在主数据.如果找到,它将使用数据库中的ID,否则首先创建此主数据,然后使用这些ID.

解析主数据ID后,系统会将事务数据插入SQL Server数据库(使用主数据ID).每条消息的主实体数量约为15-20.

以下是我们可以采取的一些策略.

  1. 我们可以首先从C#代码中解析master ID(如果没有找到则插入主数据)并将这些id存储在C#cache中.解决所有ID后,我们可以使用SqlBulkCopy类批量插入事务数据.我们可以访问数据库15次以获取不同实体的ID,然后再次命中数据库以插入最终数据.我们可以使用相同的连接在完成所有这些处理后关闭它.

  2. 我们可以将包含主数据和事务数据的所有这些消息一次性发送到数据库(以多个TVP的形式),然后在内部存储过程中,首先为缺失的数据创建主数据,然后插入事务数据.

有人可以建议这个用例的最佳方法吗?

由于一些隐私问题,我无法分享实际的对象结构.但这是假设的对象结构,它非常接近我们的业务对象.

其中一条消息将包含有关一个产品(其主数据)的信息以及来自不同供应商的价格详细信息(交易数据):

主数据(如果未找到则需要添加)

产品名称:ABC,ProductCateory:XYZ,制造商:XXX和其他一些细节(属性数量在15-20范围内).

交易数据(将始终添加)

供应商名称:A,ListPrice:XXX,折扣:XXX

供应商名称:B,ListPrice:XXX,折扣:XXX

供应商名称:C,ListPrice:XXX,折扣:XXX

供应商名称:D,ListPrice:XXX,折扣:XXX

对于属于一个产品的消息,大多数有关主数据的信息将保持不变(并且将更改频率更低),但事务数据将始终波动.因此,系统将检查系统中是否存在产品"XXX".如果没有,请检查本产品中提到的"类别"是否存在.如果没有,它将为类别插入新记录,然后为产品插入.这将针对制造商和其他主数据进行.

多个供应商将同时发送有关多个产品(2000-5000)的数据.

因此,假设我们有1000个供应商,每个供应商都在发送大约10-15种不同产品的数据.每2-3秒后,每个供应商都会向我们发送这10个产品的价格更新.他可能会开始发送有关新产品的数据,但这种情况并不常见.

c# sql-server bulkinsert sqlbulkcopy

7
推荐指数
1
解决办法
1379
查看次数

DotNetOpenAuth与Owin OAuth

我是webAPI2的新手,所以如果我的问题很简单,请原谅.我想为我的webAPI实现基于令牌的安全性,以便其他应用程序(除了我的SPA)也可以调用我的webAPI.

我从Owin OpenAuth开始并实施了POC.一切都运作良好.但是当我不得不将客户端发送到Authorization to Authorization服务器时,我找不到任何内置函数来执行此操作.我必须把自己建立起来.然后我遇到了DotNetOpenAuth,它提供了API来设置通信.据我所知,微软支持Owin OpenAuth而不是DotNetOpenAuth.

任何人都可以提供这两者之间的差异吗?另外,推荐哪一个?

提前致谢

dotnetopenauth oauth-2.0 asp.net-web-api owin

6
推荐指数
1
解决办法
1069
查看次数

如何在 Azure Active Directory 中使用多个 OpenIdConnectAuthenticationOptions

在我们的项目中,我们想要显示两个选项(以员工身份登录和以客户身份登录)。根据选择,我们希望使用 Azure Active Directory B2B 或 Azure B2C 对用户进行身份验证。

我可以将身份验证模式设置为被动并在单击链接后打开登录页面。配置单个 OpenIdConnectAuthenticationOptions 时效果很好。但当我配置多个 OpenIdConnectAuthenticationOptions 时,这不起作用。

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Passive,
                MetadataAddress = String.Format(aadInstance2, tenant2, SignUpSignInPolicyId),
                ClientId = clientId2,
                RedirectUri = redirectUri2,
                PostLogoutRedirectUri = postLogoutRedirectUri,
            });

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Passive,
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,
            });

    public void Redirect()
    {
       HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "https://localhost/WebApp1/" }, OpenIdConnectAuthenticationDefaults.AuthenticationType);
    }
Run Code Online (Sandbox Code Playgroud)

c# azure oauth-2.0 azure-active-directory openid-connect

6
推荐指数
1
解决办法
4443
查看次数