Has anyone come across a good explanation as to why MSDTC is required for a BizTalk server farm?
Thanks
Rob.
Because everything is done in transaction and some parts of BizTalk are still native COM or COM+ components. MSDTC is prerequisite for installing BizTalk.
If you check your SQL Server you will see that there are several databases created for BizTalk. BizTalk is continuously moving data among these databases and uses distributed transactions for that.
Also, when using the SQL Adapter to make SQL calls, BizTalk will enlist all calls in a distributed transaciton for ATOMICity.
Related
Myself and my colleagues are currently in the process of upgrading our BizTalk environment to BT 2020 from BT 2013R2 and as part of this we are intending on setting up two BizTalk servers so that we can have host instances running across both of them. We do not, however, need more than one MessageBox DB based on the load we see, and after looking online, there doesn't seem to be a breadth of information.
Is it possible to have our BT setup to have 2 servers running off of a single MessageBox and is it complicated to configure?
It’s the basic feature of BizTalk to have multi servers group connected to same message box. On your second computer, when you configure BizTalk using BizTalk Configuration Wizard, you choose option to join existing group and you should select your existing dbs to join.
Microsoft Docs Install BizTalk Server in a Multi-Computer Environment
I want to connect my database to CRM and as far as I understand BizTalk is the best choice. I know that BizTalk has its own messaging system, but is it enough considering the stability of my data or shall I put a message-bus in between?
Adding another link in a chain will not make the chain more available.
BizTalk has many built in mechanisms to improve the stablity of this connection. Think of automatic retries, automatic throttling. There is no need for servicebus for stability.
You may want to use servicebus when you need to use a protocol that BizTalk does not support (for example, CRM in the cloud uses azure queues, which BizTalk 2010 does not support (higher versions do)).
If the environment that you run BizTalk on is stable, then BizTalk will be stable as well. If the environment is not-so stable, then you can look into clustering to create some added stability.
No. Adding any 'message broker' between BizTalk and CRM, or most any system really, will only add unnecessary complexity. This would be a net negative.
I am using BizTalk 2006R2, I have NOT used MSMQ.
But I found that there is a mqsvc.exe running in the BizTalk server, what is the usage of mqsvc.exe in BizTalk environment?
Microsoft Message Queue Server (MSMQ) as your question indicated.
BizTalk and other systems can use that to queue messages for processing asynchronously but with guaranteed delivery.
Even if BizTalk is not using it, you need to confirm that it is not being used by other systems to communicate with each other.
I'm a total unix-way guy, but now our company creates a new application under ASP.NET + SQL Server cluster platform.
So I know the best and most efficient principles and ways to scale the load, but I wanna know the MS background of horizontal scaling.
The question is pretty simple – are there any built-in abilities in ASP.Net to access the least loaded SQL server from SQL Server cluster?
Any words, libs, links are highly appreciated.
I also would be glad to hear best SQL Server practices or success stories around this theme.
Thank you.
Pavel
SQL Server clustering is not load balancing, it is for high-availability (e.g. one server dies, cluster is still alive).
If you are using SQL Server clustering, the cluster is active/passive, in that only one server in the cluster ever owns the SQL instance, so you can't split load across both of them.
If you have two databases you're using, you can create two SQL instances and have one server in the cluster own one of the two instances, and the other server own the other instance. Then, point connection strings for one database to the first instance, and connection strings for the second database to the second instance. If one of the two instances fails, it will failover to the passive server for that instance.
An alternative (still not load-balancing, but easier to setup IMO than clustering) is database mirroring: http://msdn.microsoft.com/en-us/library/ms189852.aspx. For mirroring, you specify the partner server name in the connection string: Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;Failover Partner=myBackupServerAddress; ADO.Net will automatically switch to the failover partner if the primary fails.
Finally, another option to consider is replication. If you replicate a primary database to several subscribers, you can split your load to the subscribers. There is no built-in functionality that I am aware of to split the load, so your code would need to handle that logic.
hoping someone has experience with both sql server and postgresql.
Between the two db's, which one is easier to scale?
Is creating a read only db that mirrors the main db easier/harder than sql server?
Seeing as sql server can get $$, I really want to look into postgresql.
Also, are the db access libraries written well for an asp.net application?
(please no comments on: do you need the scale, worry about scaling later, and don't optimize until you have scaling issues...I just want to learn from a theoretical standpoint thanks!)
Currently, setting up a read-only replica is probably easier with SQL Server. There's a lot of work going on to get hot standby and streaming replication part of the next release, though.
Regarding scaling, people are using PostgreSQL with massive databases. Skype uses PostgreSQL, and Yahoo has something based on PostgreSQL with several petabyte in it.
I've used Postgresql with C# and ASP.Net 2.0 and used the db provider from devart:
http://www.devart.com/dotconnect/postgresql/
The visual designer has a few teething difficulties but the connectivity was fine.
I have only used SQL Server and not much PostgreSQL, so I can only answer for SQL Server.
When scaling out SQL Server you have a couple of options. You can use peer to peer replication between databases, or you can have secondary read-only DB(s) as you mention. The last option is relatively straight-forward to set up using database mirroring or log shipping. Database mirroring also gives you the benefit of automatic switchover on primary DB failure. For an overview, look here:
http://www.microsoft.com/sql/howtobuy/passive-server-failover-support.mspx
http://technet.microsoft.com/en-us/library/cc917680.aspx
http://blogs.technet.com/josebda/archive/2009/04/02/sql-server-2008-database-mirroring.aspx
As for licensing, you only need a license for the standby server if it is actively used for serving queries - you do not need one for a pure standby server.
If you are serious, you can set up a failover cluster with a SAN for storage, but that is not really a load balancing setup in itself.
Here are some links on the general scale up/out topic:
http://www.microsoft.com/sqlserver/2008/en/us/wp-sql-2008-performance-scale.aspx
http://msdn.microsoft.com/en-us/library/aa479364.aspx
ASP.NET Libraries are obviously very well written for SQL Server, but I would believe there exists good alternatives for PostgreSQL as well.