Shared Database supporting back-end site and front-end site
My requirements are simple.
1. Front end servers shall service public traffic only
2. Back end servers shall service content editing traffic only
I have two code identical deployments. They differ only in their hardware specs. They share a single database. All content is hosted in the database.
When a publish occurs, we do not see the new content on the front end unless we a) reset the front end server b) edit then leave the page on the front end server.
It seems there are others out there that have a similar setup, Did you need to do anything special to get this to work?
Thanks
Hi Chris,
The reason you are observing this behavior is the in-memory cache used by Sitefinity, which is separate for each of your servers. Although the DB is shared and both servers read from it, if something has already been open, then each consecutive request is served from the cache.
The scenario you describe (distributing load between different servers) falls into the category of Load Balancing. We have support for this in Professional edition and higher, and you also buy an add-on for Standard edition. More information on how to enable load balancing in Sitefinity can be found in our documentation:
http://www.sitefinity.com/documentation/documentationarticles/installation-and-administration-guide/load-balancing
Let us know if this doesn't work for you.
This is an azure environment, Site1 is defined as 2 instances and Site2 is defined as 10. Site1 serves as our back-end and Site2 our front-end. Would setting up load balancing with entries of site1 and site2 in the load balancing settings help to solve that issue?
Hi Chris,
Exactly. Setting up the sites as such running in NLB will fix the issue.
Kind regards,Hi there,
We're also trying to configure our environment similarly as Chris originally outlined:
1. Front end servers shall service public traffic only
2. Back end servers shall service content editing traffic only
We are hosting these servers within our company. Can you please provide what the 'general' or best practice for site/server environment configuration is? We don't want to have the sitefinity administrative (backend) sections exposed on the public facing web server.
Are there any issues that we should encounter (I'm concerned particularly about the config files -- if an update is made on the backend servers that update the config files -- we would have to manually update the config files on the front end server?) -- all data is stored in the database.
I've read the following article -- www.sitefinity.com/.../one-way-publishing-scenarios
Scenario 1 seems to be applicable to what I desire; however, I do not know the best approach to perform this. We also have the 'site sync' module; however, it doesn't appear to server this process. Site sync seems more 'manual' (even though you can create a schedule -- the minimum is daily). Our content is published by authors far more frequently and requires to be on the public facing side almost immediately.
If siteSync can accomplish Scenario 1 -- can you please help outline the steps required to perform this?
Greatly appreciated
Hello Chris,
The way to setup this on 6.0 is:
1. Setup an approval workflows on your 1st website
2. Create an item on the first site, Send it for approval. Until this item is approved and published, it won't be synced to site 2, even if you execute a Sync operation.
3. Someone on the first site approves the item (publishes it). Now if you sync the content, it will appear on the second site as published.
There is also another approach I can recommend. To secure your backend, you can use a whitelist. You just need to add a rule that excludes /Sitefinity (but does not exclude /Sitefinity/Public/Services) for all external IPs and this way nobody will be able to access the backend, but IPs from the whitelist.
Hi Svetoslav,
Thanks for the info. However, it still doesn't appear to be what we'd like. From what I understand of your steps, the 'sync' is still a manual process? It would be far greater if the 'sync' can be scheduled to run on a shorter time frame (daily every 15 minutes). But that doesn't seem to be the case currently. So even if there is workflow attached to publishing (on backend site), the content wouldn't be synced to the front end server until the 'sync' is executed ?
I have actually implemented a whitelist as you suggest -- we would still prefer though to have the administrative content authoring/editing, etc done on an internal server (and the public facing external server would only be used to display the site)...
Hi Rico,
You are correct - the scheduling options are only the ones who you see and you can have only one schedule at a time.
Apart from SiteSync, other options that you might utilize are:
- deploy your database from staging to production, given that you don't have any data that comes from live (like forums, comments or statistics). If this is the case, then deploying the database would work perfectly for you. It can even be done without downtime - if you are in an NLB environment
- Use two Sitefinity instances that are load balanced, similar to what is described in the beginning of the thread, though this is not a very common practice. One of nodes will be public and the other one would be hidden and used only by your content editors. On the public node, you can disable the backend access with a firewall. Important thing is that the two instances should be able to see each other's servers, so that they can invalidate their cache.