Showing posts with label Architecture. Show all posts
Showing posts with label Architecture. Show all posts

Wednesday, April 11, 2012

IT industry vendors have a unique way of converting every business concept into mundane technology problem to sell their technology products


IT industry has it own way of converting every beautiful business concept into mundane technology problem to sell their technology stack. They reduce every business problem entering market and killing it by labeling as technology problem. 

WEB 2.0
Web 2.0 is not so much of technology but new way of doing business using crowd-sourcing, social networking, collaboration across value chain. 

Strength of  - JavaScript , Making rich UI, Open source LAMP,  Open source products gave way for blogging sites, Rapid Development frameworks, AJAX ... --- thus technology was starting to overshadow Web 2.0 concept. People started claiming Web 2.0 === AJAX.    

Vendors started a war of coming up with framework of AJAX. Each came up with his own version of AJAX library selling them to customers with make-believe of Web 2.0. In this war actual meaning of Web 2.0 was lost somewhere.

Web 2.0 is very highly innovative concept. It needs a radical shift in culture and Way of Working. It may disrupt the entire traditional revenue model.  
Ex- In news industries, where there were defined reporters who could publish the news. Now in Web 2.0, every man can be a reporter and contribute to news making.
In publishing industry, there were renowned authors who could author a book or article. Now in Web 2.0, every man can be a author, publisher. Any person can become a reviewer and do proof-editing.
In music industry, only contracted bands came out with music. Now any man can try his hand at singing and upload it on Youtube.
In Retail, companies will contract person to develop the software and sell. Now any man can develop software and host it on AppStore and sell it to mass.

Telecom companies are new music sellers.  
Coffee houses are new retailers.
Retail companies are new IT Hardware Sellers. 

These concepts are business ideas requiring a deep thinking and change in which make the difference between a successful and failures.
But innovative business concepts cannot be commoditized hence cannot be sold and hence ignore by Vendors.

SOA
SOA is not so much of technology but aligning technology to business. It is paradigm of thinking in terms of Enterprise functions in terms of business process. And technology then is aligned to meets those processes. 

IT Vendors knew what will sell is not this concept but their technology products. So they came out with tons of materials equating SOA with ESB, BPM .... and SOA === ESB+BPM.

Vendors started a war of coming up with their ESBand  BPM. Each came up with his own version of ESB  product selling them to customers with make-believe of SOA. SOA was killed every project started with the customer asking which ESB, which BPM.  
Aligning technology to Business went missing. result thousands of dollars down the drain because of failure of SOA projects.
  
SOA is foremost a business concept. Demanding companies start thinking in terms of their business services they offer to the world. These services are then broken down in business processes which are broken down into granular services. Real challenge is in service identification and aligned with attributes which make them reusable in different client scenarios.

The services identifications, making service reusable, service design principles are complex concepts require deep analysis not commoditizable. Hence are ignored by vendors. These are ideas which make a SOA project successful or failure.


BIGDATA
Bigdata is a business problem of utilizing millions of unstructured information assets (text, audio, video, chats etc.) to the benefit of business.


IT Vendors knows and have converted this into a mundane technology problem. Enter problem “Of Storing of large data and processing large data”. Enters Hadoop.

Vendor has now started the race of coming up with their own version of Hadoop infrastructure.
But real problem lies in how we actually extract meaning out of unstructured free text. Is Hadoop’s Regular expression enough to extract the meaning out of this free structure text? Log may be fine; because they have structure and can be extracted meaningfully by regular extraction patterns.

BIGDATA is more a concept of semantic text meaningful web than infrastructure. It is more about converting the text of non-meaningful words, phrases into more meaningful text by extracting the concepts and entity from them and linking into existing Web of information. LinkedData, DBPedia , WikiPedia, Semantic technology, Ontology , Corpus, are more important than infrastructure. 

The extracting meaning, pattern recognition, Natural language parsing, ontology, corpus creation are complex concept not comoditizable hence ignored by most. These are ideas which will make BigData problem successful or failure.


Monday, October 3, 2011

Is SOA about Technology?

A week back I was discussing SOA with somebody who is expert in SOA and had been implementing SOA for more 5 years. He explained SOA mostly in terms of tools and technology. He had worked in best of stacks in the industry. Service Identification an the important concept of SOA paradigm was nowhere in mention in his entire talk.



This seems to be a common notion of SOA around the industry. Most people and interviewer start focusing on the Enterprise Service Bus (ESB), Business Process Management (BPM) and Service Life Cycle which are the tools for SOA deployment.


It is similar to start discussing about Object Oriented Design from Language syntaxes, Application Servers, Compilers and Transactions etc. instead of discussion about the Design Principles for finding reusable components, classes, relationship between classes to achieve reusability, extension, flexibility etc.


No one discusses about Principles for identification for services which makes sense and achieves reusability, designing services and interfaces which are immutable, configurations which will allow services in multiple scenarios.

SOA is about Business aligned IT. So any discussion about SOA should start from Business so that we can then accordingly define IT strategy in alignment with the Business. But, when SOA word is mentioned people start talking about web services, BPM, ESB leading to its early death.


Microsoft in their “Business-Oriented foundation for Service Orientation” talks about new architecture principles which needs addressing:-
  • How do we prevent service-orientation from following similar promising initiatives into the same architectural mistakes of the past?
  • How do we ensure that the chosen implementation architecture relates to the business requirements?
  • How do we maximize the life expectancy of the implementation in an ever-changing environment?
It further talks of SOA tenants Principles for identification for services which makes sense and achieves reusability, designing services and interfaces which are immutable, configurations which will allow services in multiple scenarios.   

Friday, February 25, 2011

JQuery and CSS3 : Way to create Powerful Web Pages


JQuery is doing magic. 
Recently in a small project I had a chance to use JQuery. I was very surprised at seeing the amazing powe rof the JQuery. What I used to do in a day using Javascript is now possible in minutes. 
I took me few minutes to make the divisions draggable, resizable and selectable.   


It haandles everything from event handing, animating, and Ajax without actually specifying the javascript functions at each element level but by just binding using a selctor using id, class, or at any other attribute.


JQuery is way too powerful and helps to creating rich web interfaces very rapidally. 


For what i used to write a cumbersome code like, 

 document.getElementById("x").xxxxx


in JQuery,
--> $("#x").xxxx


To make element draggable,
    $("#x").draggable();


To make element resizable,
    $("#x").resizeable();




$(".icon")
.bind('click',function(event) { ... }


And all elements with class="icon" will be bind with onclick = function


$(".icon").hover(function() { ...}


similarly, for hover ....




Ajax is as simiple as this,
$.ajax({
   url: "member/chat",
   cache: false,
   type:"POST",
   data:myparam,
   success: function(data) {
       $(msgWin).html(data);
   },
   error: function(xhr, ajaxOptions, thrownError) {
     alert("An error has occurred");
     alert(xhr.responseText);
     alert(ajaxOptions);
     return false;
    }
});
   
and much more.... http://docs.jquery.com/Main_Page




If I remember, Google Web kit, many Java frameworks tried to solve this problem by creating a cumbersome framework which will allow java programmer to create interfaces which will create javascript transparently. I always found them problematic. I had always preffered to code my client interactions in Javascript.


With JQuery coming in, I think those frameworks are redundant. 


CSS3
Other thing, I used in my project was CSS3. I am really amazed at what is being made possible by CSS3. I could provide shadow, round rectangles, skew rectangles, transform, translate, animate etc. 
I do not think I would need to use images to so any effect, I can as well do it using CSS3.


I was surprised at the power of CSS3 of making so many things possible which I never thought is possible in Web pages.




JQuery and CSS3 are 2 technologies which I will recommend for anyone to learn as they will definately shape how the web pages  will be created in future. I definitely am a fan of both of them.

Tuesday, September 7, 2010

REST & SOAP

SOAP

SOAP has been the protocol in use for making the web services. SOAP which stands for the Simple Object Access Protocol was designed to convert the OOP's (Object Oriented programming) Objects to be transformed over network using XML.
So it is a direct logical descend from the OOP world where SOAP are the objects which are passed across between RPC calls.

RPCs are exact match for the Object method calls. They were promoted to allow the transform the OOP design wihtout much change to distributed architecture over network.

However, this exact thinking needs to be avoided in a distributed architecture. People tend to abstract the location aspect of distributed objects. In any distributed architecture the frequent expensive network calls leads to latency and degraded performance.

Hence, the case of making web service using SOAP using the RPC style Vs Document style.

The SOAP with Document style web services do not exposes the several methods with many parameters but single method with large document.
Example-

SOAP RPC wil be like -

CreateOrder(int Order#, String OrderType, String CustomerNAme, Orderline orderline1...

SOAP Document will be like

CreateOrder(Document OrderDocument)

SOAP RPC style makes it very difficult for clients because they have to deal with so many parameters to use and maintain and, their types.
It also makes it difficult for future changes because in case new field is added then the method will change, or change in type of the parameter also causes problems.

SOAP Document style provides the XML format in which client can provide his data. He has to provide just one parameter; the order document.
It also solves the problem of the future by allowing any changes to be made like adding new fields or change in field types inside the document.

SOAP RPC however is much used because of ease of development because of no requirment of thinking or design. One-2-One Mapping with old techniques of Objects in OOP makes it so easy.

The tools also promotes SOAP RPC because of easy automation of converting the methods by straight forward conversion to soap, hence is preffered by developers.

REST

REST has been lately been preffered protocol for making web services. REST is applying the HTTP methods (GET,POST, PUT and DELETE) on the objects and entities as they have been applied to the HTML pages.

HTTP few methods (GET, POST,PUT and DELETE) is the secret of making it so popular and success of the internet by allowing a simple browser to be able to handle HTML pages by just 4 verbs(methods).

It works on the principle-
There are only 4 things which can be done on an entity like say ORDER

GET RDER
POST ORDER - change the order
PUT ORDER - Add an Order
DELETE ORDER - Delete Order

ORDER changes its state based on the method acting on it. And these verb returns the representational state of the entity (as describe by the URI) as HTML resouces like Web pages, images etc.

REST simplicity is its power by allowing just few verbs(manageable by internet agents like browser to process) as aginest SOAP which introduces hundereds of methods thus making so unmanageble and requires manual intervention.

REST usage in architecture is however recent. There are strategies and best practices which needs to be developed to popularize REST and give confidence to people to be able to use REST actually in spirit and not like transformed version of older technologies.

A for the other concerns like security, REST based on HTTP protocol would be implementing security very similar to how WEb pages is implementing it. It depends on the Server implementing the security on access (for GET, POST, PUT and DELETE) on enities.

Tuesday, August 31, 2010

CAPACITY PLANNING

I will try to explain capacity planning by doing a very basic capacity planning for a sample e-Commerce application. I will try to calculate the number of servers required for my site.
Let me take a scenario of my web site which has some 100,000 user visitng daily. Now to do capacity planning for this site, I refer to this site of Capacity Planning Guide http://publib.boulder.ibm.com/tividd/td/ITAME/GC32-0847-00/en_US/HTML/cpmst17.htm#HDRCPD001997094

Based on refered Capacity planning guide, the steps of capacity planning are:
1. Identify Server Transactions
2. Define transaction throughput requirements
3. Choose Hardware
4. Gather transaction throughput requirements
5. Calculate the number of the machines

1. Identify Server Transactions
My e-Commerce applications common use-cases with percentage in transactions are:

Use-Cases     percentage
------------------------
1. Search         50
2. Register       15
3. Login          20
4. Add to Basket  10
5. Purchase        5

2. Define transaction throughput requirements
By popular assumption 1% of users are concurrent = 100,000 x 1% = 1000 users.

Now all 1000 concurrent users are not working on same pages or doing same kind of transactions. I take a sample of the significant use-cases. I divide the users among the use-case transactions based on some percentages.

I take my e-Commerce applications common use-cases and caculate the transaction throughput requirements:

Use Case     %Users #Users   TT*  TPS** Txn-Type   Req. MCycles
-----------------------------------------------------------------
Search          50    500    10   45     Heavy        9000
Register        15    150    30    5     Medium        450
Login           20    200     5   33     Light        1320
Add to Basket   10    100    10    9     Medium        810
Purchase         5     50    20    3     Heavy         600
------------------------------------------------------------
               100    1000                          12180
------------------------------------------------------------
TT  - Think time
TPS - Transaction per second
TPS = ConcurrentUsers/(1+ TT)3. Choose Hardware
Now, based on my selected App Server H/W configuration,
Util   CPU Specs              Capacity of Server
--------------------------   --------------
50%   Single Quad Core-3GHz   6000 MCycles (2x4x3000x50% MHz)


4. Gather transaction throughput requirements
Based on my applications testing,

Txn-Type   App M-Cycle
--------------------------------------
Light        40
Medium       90
Heavy       200

5. Calculate the number of the machines

Now, based on my selected App Server H/W configuration,

Util.     CPU Specs
--------------------------       --------------
50%     Single Quad Core-3GHz    6000 MCycles (2x4x3000x50% MHz)
          Reqd. Txns             12180
          Reqd. Servers           3

So, I arrive at the 3 servers of single Quad Code-3GHz specification to meet this demand.

Saturday, August 28, 2010

Web Application Architecture

This summary is not available. Please click here to view the post.

Tuesday, August 24, 2010

How did I made entry into architecture world from designing

I remember in early days when I had been doing lot of technical projects. I had been successfully leading and designing the complex problems which lead me to believe I was now ready for the architect position.

However, I was still at the designer and tech lead stage and did not know how to break into the architecture world. I did not know how to prepare for the architecture position. I did not have people around me to guide me. Architecture was still a new position and not much literature was available for it. Books gave a little theorectical knowledge of architecture.

With no other options, I started to apply for the architect position. I prepared some based on the job descritions. And then armed by all the knowledge I had of technical designing a project and OOP I went through many interviews which were largely unsuccessful because of my lack of deep knowledge in that area.  In the interview I was asked 50% design questions (some of which I could answer) and 50% architect questions. Design questions were to judge how well do I know my subject and how well I have been at things I say have been doing.

During firsts few of my interviews:

I was asked about the architecture styles and pattern.

I could answer few like Client-Server, Layered and PAC (Pseudo Abstraction Control) but did know about the architecture patterns like blackboard, pipe and filter etc. So I could not answer these questions satisfactorily. Here I learnt my first lesson that you need to know you subject before going for an interview.

I could solve the complex problems by my persistence and problem-solving skill, but these skills are not demonstrable in an interview unless interviewer himslef takes a special interest in forming questions to judge it. It was expected from me that I should know architecture pattern and styles otherwise I would not know there are existing styles and pattern which can solve lot of common problems.

In current context, I would be advising people to learn about the SOA, integration patterns, Architecture patterns like blackboard, pipe-filter etc.

I was asked how do I decide on a design of a class.

I started with my usual gyan of the class should be maintainable, easy to use, flexible etc. etc. But, I could not answer logical questions like "what do I mean by design easy to use class?". 

All this is part of the five basic patterns of OOP and Design which we usually tend to forget while designing the classes.
SOLID (Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion) http://en.wikipedia.org/wiki/Solid_(object-oriented_design)  by Robert Martin.

We may be using these principle knowingly and unknowingly during design but it should be a habit to apply these principles while deciding on the class design.
Lot of tools automate these by refactoing the classes. So we apply these using a tool without knowing the actual intent or what problem did the tool solve for me.

When I am learning something I make a practice of not using the design tools (like eclipse provides) but code moslty using the notepad so that I am aware of all the complexity by manually adding each imports and class method and doing the changes. However, duing the project I use the Visual Desing tool becuase there the motive is to attain the high productivity.
One of the examples to explain the use of principle would be asking a questions like:
Which type of Robot would a user prefer?
A) Robot which comes with a single command like cookPasta?
B) Robot which comes with many basic command like “put pan on fire”, “pour water in pan”, “put pasta in pan”, “add ingredient” etc. And these command can be used to create a bigger command cookPasta?

I think robot (B) is very flexible because I could make him cook pasta, cook rice, cook pulse.
However, Robot (A) is very easy to use because user can give a single command to cookPasta and does not have to know insider methods and other complexity. This also explains about why we should use access scope(public,private,...) of methods .

Hence, Robot (A) is preffered by the users because of ease of use.

I was asked what I do for performance.

I had not done much work on performance. I have been only coding and designing keeping in mind the performance, best practices. So I answered with the caching, clustering stuff but could give the satisfactory answers to the actual measure of the performance like 999 (4 9s), 9999 (5 9s). Or how do I measure and  make changes in my code for giving a required performance.
Clustering is not just  a deployment/adminstration domain but require a careful desiging of the classes and strategy for achieving the horizontal scaling and coding changes for deployment for avoiding SPOF (single point of failure).

This gave me an awareness of the realm of performance, capacity planning stuff which I had been ignoring till now. I went on to understand about little’s law, capacity planning using for response time, concurrent users, transaction and about performance testing. A very complex and challenging area for to master….

So my entry into architectural world from designing world was very gradual. It actually pays to take on interviews so as to understand what is expected out a person in architecture and what is happening around in the world even if we are not looking for a job.

Interview actually leads to a meaningful learning and discussion (free of cost) with a master of those fields who actually guide us into our choice of path. He asks us relevant questions about that area which helps us to know what is expected out of an architect and what kind of questions to prepare for. Provided we come out of an interview with well aware of our weaknesses and with broad scope of what my target of next learning should be.

Friday, July 30, 2010

Few useful resources/links on web on aspiring Architects

This blog is in reply for all the mails I get for links and reading material for an aspiring architect.
Architecting has several aspects:

  • Modeling (How to create Architecture document, describe various views shown above)
                 - 4+1 Rational View with 5 views is most common http://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf
                 -Visual Architecting  http://www.bredemeyer.com/pdf_files/WhitePapers/VisualArchitectingProcess.PDF

Architect technical demonstrates solves how significant use-cases are being handled by his architecture. (details in text below)

    • This is very specific to problems at hand. Also depends on whether you are custom building it or using a product. If product, then you need to show how it is integrated.

    • Integration Architecture: how would system integrate with applications or packages being selected for usage.

    • Information Architecture: how is the screen or user interface desinged and navigated to allow access to the system 

  • End-2-End System flow

    • Logical Architecture, Layer architecture (Frameworks at each tier is shown and explained and their integration).\

    • Component Architecture; significant components and their relationships.

  • Messaging Architecture: if the system is based on the messages.

  • Service Architecture: if the system is based on SOA paradigmn.

  • Non-Functional Requirements

    • Performance - Caching, Capacity planning

    • Scalability - clustering, Server Farms …

    • Security – Single Sign-on, Windows Security Architecture, Windows Authentication, Kerboros, Active Directory …
Microsoft Application Architecture Guide at msdn site: http://msdn.microsoft.com/en-us/library/dd673617.aspx  is a very good resource which talks on all these things:

- Principles of architecture
- Patterns and styles
- Guideline for layers and components
- Quality Attributes
- Crosscutting concerns
etc.


 Some other architecture sites from Microsoft on internet:
A very good source of learning is learning from the architecture of other applications ‘architectures and patterns (like open source or code in codeplex) .
Copying and understanding from successful applications’ architecture is best form of learning. These applications may already have some concerns in the system at hand. So understand how have they solved their problems and apply them intelligently.
Then there are other sites based on the some specific area of architecting:

  • Sharepoint http://msdn.microsoft.com/en-us/library/bb892188(v=office.12).aspx

  • Biztalk (SOA) http://msdn.microsoft.com/en-us/library/aa562161(v=BTS.10).aspx

  • Cloud Architecture (Azure) http://wag.codeplex.com/
Some sites describing architecture in general on main techniques of Architecture Modeling:
If somebody searches on google there would ample material for learning architecture but becoming architect is gradual process ...
Developer - > Senior Developer -> Module Designer -> Project Designer-> Architect
All the roles above are problem solvers. Only the problem get complex in size and scale as we move left to right…
However, there is no time limit for any of these roles because someone who have done a very complex project in one role and is mature can become architect faster than a person who is doing routine technical jobs and does not get involved in complex technical scenario.
Developer
Developer's focus is only his particular program. Senior Developer looks at more complex and larger programs and module. He may only focus on back-end or front-end program. Like writing a class function which takes the inputs like Account# and gives back the interest calculated on his account. So developer would write a program which reads in account balance and calculate the interest (monthly/yearly) based on applicable interest method. For this he makes database calls, does calculations and returns the interest.
Designer
Designer starts designing the module/system, he is looking at much higher level than programmer. He is looking at how program written by developers will interact with other programs to provide a functionality end-2-end. He may be designing the entire module of interest system.
His work starts much earlier than developer because he designs the entire module and envisions the required classes and functions which will make the interest module functioning. It is his inputs which are used by the developer for developing the program.
Designer does more abstract thinking. He thinks at the module level. He does not think about the java programming of multiplication, database calls to calculate interest. However, he does design and check feasibility and availability of required data.
He envisions the various classes and entities like Accounts, Account Types, Balances (Monthly Avg. Balance, Interest Methods etc.) , Interest Method, Interest Accrual, Interest Application ….
Architect
Architect does works with much further abstraction. He thinks at much higher level. His work starts earlier than designer because he is checking the feasibility of the entire system. He tries to think of all the risks and technical aspect of architectural significance. He finds and articulates solution of all these aspect of significance.
What is significant depends on what has not been tested or not know. Reading from a file is not of significance because any java programmer can do it and has widely known solution. But reading from file which is located in “cloud or hosted in remotely” with some aspect of synchronization and concurrency becomes significant, if programmer does not know about it. So architect would take this as significant use case and provide solution for it in his architecture document.
Architecture models architecture from all views (Developer, Designer, Functional, Deployment, and Process) because his document is guiding framework for all these people.
Architect by providing solution for significant technical aspect convinces development team of the feasibility of his solution. He gives confidence to the development team that there is no roadblock at later stage. He provides guidance framework for designers by providing the significant component in the system and their relationship. He also provide end-2-end from user-interface to back-end system functioning and data flow.
Architecture document’s Deployment diagram advices the system administrator about the hardware and server configuration. Project Manager can find the entire system complexity and size from the architecture document.
Functional people can see how their significant use cases are being fulfilled and are convinced.
So, all risks are mitigated and presented and discussed to the project team for development. The risks which are mitigated are validated by small POCs.

Tuesday, June 29, 2010

How do I create Enterprise Architectures

Enterprise Architecture is the holistic architecture for the enterprise. The enterprise may have many departments and functional groups. Each may be using tools and application for doing their jobs. There may also application or sites which are facing customers. These sites also connect with internal applications and derive their content from them. There will also be tools and application used by Executive and higher management for reports and decision making. Enterprise may also be using tools and application to interacts with its vendors.
So enterprise application landscape can be very complex with no start or end.

Well how do we start?

We start by understanding the enterprise business. The good point to start is making the value chain of a company. Value chain is built on the concept that every company buys a raw material from primary producer (vendor) and then company adds value to the product and then sells it to the market. The company charges the customer the price of that value-add.

Lets take an example of a garment making company,

Business
Core Functions: This includes the work which actually adds the value to the product.
Will source the clothes from clothes wholesaler, the clothes are stitched into garment (shirt, pant etc.) and clothes are then supplied to showrooms for selling.

The value-add is converting a raw cloth into shirt or pant. But this value-add needs several aspects to be attractive to the customer. To be able to make shirt:
Design
Company‘s designers create a design for the shirt. This creative design department is very artistic work and several fashion designers may be on roll of the company for creating this design. The design is also influenced by the Market Research and Sales inputs.

The design creation is project of its own. Design Manager is the owner of this project. He assigns the work of design like Summer Collection to several of his own designers or may source it from freelancer external Fashion designers (which are not on payroll of the company). In this case the there is contract signed between company and the Fashion Designers with terms & conditions of royalty and other legals, this is handled by legal department.

This design collection is first made on paper and undergoes several cycles of reviews and editing before getting finalized. This process is very lengthy and may take 2-6 months.
After final approval, the first design is sent for creation on real cloth. This is again a very creative process and again takes several cycle of approval. The design on final approval may be Marketing & Advertisement department for campaigns, fashion shows, hoarding etc. Market and Research may also contact Advertisement companies for their advertising; again contract is signed taken care by legal.

Production
After final Design approval, the design goes in for production. Here from one creative design, production is started for mass and for general public.

This process is undertaken by Production Manager, who manages production floors. The cloth in bulk is sourced from Cloth vendors and other vendors (like button, collars and other raw material etc) managed by logistics department. Logistics handles inventory management (ordering, storing, and warehouse), transportation and their invoicing.

Logistics also handle the upstream Distribution & Delivery part of the value chain supplies. It manages the inventory of finished product in warehouse and then shipping to showrooms, customers etc.

Sales & Marketing
Sales and marketing handles the sales of the finished products. It includes finding new customers, getting new orders from old customers, relationship management with clients.

It also handles advertising, campaigning, market surveys for feedback to the planning department.
Planning
Company‘s planning department plans for the new ventures, bringing out new collections, investments in marketing, advertising. Planning departments also plans for the volume of the finished products in market. It is plans for distribution to various territories. All this planned according to the information from past sales, surveys, territory wise data, planned Vs targets achievement etc.

After Sales Service
Company also services its customers for after-sales. This may include attending to customer problems like defect, returns, warranty.

Support Functions: This includes the work which supports the core services. These services are general services and do have direct impact on the value-add services.


Human Resource
All the services in the enterprise are done by people. People needs salary and Human Resource to service their HR needs like recruitment, bonus, payroll, compensation, leave management etc.

Finance
All expense, revenue, receivable etc. are part of Finance & Account Management.

IT
All services needs technology to deliver, this technology comprises of the IT.

All this information of the enterprise can be depicted in terms of the Enterprise Value chain, Value chain model by Michael Porter.

The Value Chain



This Value Chain helps me realizing the company’s business. It helps me funding the core and support service capabilities of the companies.

Support functional Capabilities are services which are part of value-add of the company and can be outsource to BPO.

Core functional gives the snapshot of the company’s capabilities which is differentiating it in the market.

The Core Capabilities now become my foundation of the Business Architecture.

The Enterprises’ application landscape are usually divided as per the department, whereas for smooth functioning of the end-2-end value-chain it should be as per capabilities of value-chain.

Enterprise Architecture


As depicted in the figure, Business capabilities identified in the Value Chain define the Business Architecture again differentiatied with Core and Common Service Capabilities. By dividing the entire Enterprise in smaller departments; Core Service capability of a department can match with Segment Architecture of FEAF and Common Service are capabilities across the entire Enterprise.

Business Architecture in terms of Core and Common Service Capabilities derives the Technical Architecture in terms of layers (User Interface , Collaboration, Process, Business  Services, EAI and Applications and Tools).
Also important is the Monitoring and Governance Layer for keeping track and control on the application Technical Architecture based on the foundation Business principles, Techincal Principles etc.

Data Architecture which defines the data of information flow across the enterprise in terms of the Business Entity , Information Exchange and Information Storage.

Friday, April 30, 2010

How to get Scalability?

Every archtecture must improve on some NFRs. Namely, Salability, Reliability, Performance, Security etc.


Q What do you do to make your architecture scalable?
Uniersal law of scalability :
C(N) = N/(1+Contention*((N-1)+Coherency*N*(N-1)))
Contention and Coherehncy are conflicting part of any parallel system. Both should be low for higher scalability.

 
Example, You may remove contention of table locking by zero sharing by fully de-normalized data. That is there is multiple data in each table. Different request can independently update it independent table and there is no locking and hence wait for accessing table - zero contention.

 
But it increase time for coherency, because now data is incositent state. De-normalized table has duplicate data threfore different instance of data at different state. Now time required to bring the data in consitent state is coherency.
Hence, we must make effort to reduce both.

Reduce Contention
where, contention is race/conflict to use the shared system. Example, is there is shared file which is to be read by multiple request. Then request will be competing to read the file. If one file is reading then other will be waiting for reading it because of lock. This waiting time is the measure of contency. If we can reduce this contention the system will get more scalable becuase there will be no waiting for accessing the shared resources.

 
Remove Sharing

  1. Shared Nothing Architecture, each node is independent and self-sufficient, and there is no single point of contention across the system. The desing pattern against the shared centralized system. Instead of using the big fat database use the leaner multiple databases.
  2. Narrow lock scope is for reducing this sharing and hence the bone of contention. This usually effected by partitioning the resources like data such that there each request has access to its own partition and and hence no contention and no waiting. Also called sharding.
  3. Reducing the time of lock - Lock Striping - Lock Partitions instead of entire object, Reduce the scpe of the lock on larger segment into multiple loc of smaller segmentSplitting the lock of the entire system into multiple lock of smaller segments. Example of Concurrent HashMap
  4. Reducing the time of lock - Lock Splitting - Instead of locking entire object ; lock smaller variable which are point of contention.
Remove Latency
Higher the latency higher is the service time of the resources. Example - Database reads are slow hence becuase IO access latency. Hence, few threads are able to use the database read without contention. If the aceessing time of the data can be reduce the number of thread acessing that resource without contention will reduce.
  1. Use of in-memory objects instead of using database. Like recently popular Space Architecture (Google Wave)
  2. Use cache to remove the frequetly access queries from database. Like Memcahce
Reduce Coherency
where, coherency is the time spent for coordination to make data consistent if data was not centralized. Coherency is effort spent to coordiante the distributed database. Includes management for transactions, security, session etc.
Reduce coordination time and centrlize issue needing coordination.

 
  1. Centralized sessions or Stateless - Stateless programs needs no coordination like Autonomic Services
  2. Remove long running transaction. Create processes which emulate real world because real world is not long running transaction.
A great site to learn more to create scalable architecture.

 
http://www.webperformancematters.com/journal/2007/8/10/five-scalability-principles.html

 
  1. Don’t think synchronously
  2. Don’t think vertically
  3. Don’t mix transactions with business intelligence
  4. Avoid mixing hot and cold data
  5. Don’t forget the power of memory

 

Friday, March 26, 2010

What is Data Architecture ?

Data Architect is highly specialized role.  It is a logical growth from Data Analyst and Database designer. It is usually person who model the Data model for RDBMS.
The basic responsibility of a data analyst of a project was to model the database of system using ER modeling. He would create a entity-reliationship, define entities their attributes and their mapping to the RDBMS. He would use the  normalization, keys, indexing and other data designing activity to create table, views , indexes, stored procedures.

This activity is usually divided into:
- Defining Data Dictionary (entities,attributes)
- Logical Data Model
- Physical Data Model

Other activities would include managing database performance by optimization, tuning, query analyzing, stored procedure etc. He would also be migrating data from one database to other, database replication, and other database related techniques.

Database Architect evolves into more complex and important role. He starts right from

Business & Drivers
- Study the Business and end-user needs to capturing the business requirement
       - Study Business Process flows which would define the Data Flow (Persistent data, type and other attribute etc.)
- Based on various best and chosen design principles define the data requirments
- Define the Data Reference Model (at Data Descrition (The model), Data Context(for discovery) and Data Sharing(exhcange of  data).

Map to Technology
- Map the Data Refernce Model to technology
- Data Description (LDM,PDM)
- Data Context defintion for easy descovery and mapping between interdepartmental data entity maps.
- Data Sharing (XML standards specification)
- Address the NFRs like:
    - Performance (Caches, Tuning, Otimization)
    - Security (Access levels, Data Security at rest, in transit, encryption, compliance like PCI, SOX)
    - Avaialibity (replication, backup, Disaster recovery etc.)
    - Configuration
- Other Best practices (standards)
- Data migration if required, ETL
- Data Back/recovery, Disaster Recovery Proceudre,
- Enterprise Policies for above things.
     - Policy management
- Monitoring and Governance

Besides, creating architecture he could be in advisory roles, participating in  RFP/Deals which have major Data Center Requirement etc.

There is new term in market called Information Architect which looks simlar to Data architect. But Information architect referes more to the Web or Access layer which coverts the data in the enterprise as information to be viewed by the perople.

Similarly, there is Content Architect with ECM coming into picture. ECM, Enterprise Content Management, is about content management. content is being differentiated form data as content is unstrutured content like documents etc.ECM is different field altogether, with softwares like Documentum etc.