I am developing a complex web application and a fellow developer on the 
project has proposed the following architecture.  I am wondering if any one 
has developed a CF app in this way and if any one has any interesting 
suggestions on how to include this type of tiered/segmented approach to 
application development. The details are below.

<!---- suggested architecture --->

Tier 1) Have a lot of less powerful front-end boxes running the web servers 
and pushing the presentation materials back to the users. Because the 
number of users is high, you need a lot of boxes to handle all of the 
concurrent connections (open sockets) and track the user's session. These 
front end presentation web logic should then gather the information, such 
as extracting out the fields from the HTTP request, and call on a service 
to handle the request. This tier then takes the response back from the 
second tier and formats it appropriately for a web user (XML+XSL, HTML, 
voice response unit, WML/WAP, etc.).

Tier 2) Have fewer, but bigger, highly scalable, clustered, fault tolerant 
service providing computers contain the main business logic.
There is often a good reason to split this "tier" into two parts: a) a set 
of services that are tightly coupled with the front-end that can aggregate 
information across multiple web pages, for example, before handing off to 
the "generic" service that contains the main business logic. Some people 
(me included), will include this part in the first tier, though. b) the 
generic business services that no nothing about web pages.

Tier 3) Put the database server in another tier. This is where databases 
like DB2 and Oracle tend to shine because they can have huge tables spread 
across multiple machines (physical partitioning). I'm not sure if SQL 
Server can do this or not.


In practice this means that a request is sent from a user (browser, pda, 
phone, fedex back-end system) to the first tier that understands how to 
communicate with the device/system the user is on. It then extracts the 
important information included in the request and passes it to the second 
tier that is generally ignorant of the method used by the user. It performs 
the business logic, updates the database in tier 3 as needed, and returns 
the results back to the tier 1. Tier 1 then examines the response and 
formats an appropriate reply back to the user.

This is a generic three tier architecture for the web. When tier 1 is mixed 
with tier 2, or tier 1 goes straight to tier 3, you end up with many 
problems architecturally, mostly to do with scalability and 
maintainability, though great for RAD. While fast up front, this is 
short-sighted and doesn't buy you enough benefit. You don't want business 
logic spread out over too many areas; presentation programmers have a 
different set of skills required than the services people -- since 
programming for a web, pda, cell/voice response, work engine, third-party 
application, etc. are all different. Database control is complicated by 
having access to it from too many places, including updates when schemas 
change and issues related to the number of concurrent db connections, 
security of the servers, etc. The database schemas often change because of 
performance reasons (tables are normalized or denormalized or partitioned, 
etc. to handle loads and volumes), and you don't want more than business 
logic to have to deal with it. If too many programs have their fingers 
directly in the db, then they all have to be updated to be correct. That's 
a recipe for a nightmare as a system grows. Lastly, if someone hacks into a 
web server (the device they see and must be accessible through the 
firewall), you don't want that box to know about database passwords, etc. 
since it will be used to hack into the rest of the system.

------------------------------------------------------------------------------
Archives: http://www.eGroups.com/list/cf-talk
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=lists&body=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.

Reply via email to