Hi all,

Currently the bottleneck happens at getPendingOperations API. That method
takes a while to be executed as it involves both fetching the next
operations & updating the status of completed operations. The complete
getPendingOperations flow has more than 5 database calls (as I remember)
including a DB update. Hence most of the execution time would be spending
on DB queries. A proper distribution of load might help us to safeguard
server from sudden bursts for some extent. But IMO I think we should be
also focusing on making getPendingOperations flow more efficient so that
each device spends a lesser time in executing getPendingOperations API. For
that we'll have to use queues for both ways (fetching / updating) so that
we could fetch / update data from in-memory queue rather than from DB which
is more efficient. Hence +1 for using Queues.

Thanks,


Harshan Liyanage
EMM/IoT TG
Mobile: *+94765672894*
Email: hars...@wso2.com
Blog : http://harshanliyanage.blogspot.com/
*WSO2, Inc. :** wso2.com <http://wso2.com/>*
lean.enterprise.middleware.

On Thu, Mar 2, 2017 at 12:10 PM, Kamidu Punchihewa <sachi...@wso2.com>
wrote:

> Hi All,
>
> Queuing the in and out communications seems to be the best option other
> than handling the loading using times outs. But we need to come up with the
> priority order when its come to the communication which is time sensitive
> temperature monitoring in fire alarm etc.
>
> +1 for utilizing queues for communications going both ways.
>
> Thanks and Best Regards,
>
> Kamidu Sachith Punchihewa
> *Software Engineer*
> WSO2, Inc.
> lean . enterprise . middleware
> Mobile : +94 (0) 770566749 <%2B94%20%280%29%20773%20451194>
>
> Please Note that I have dyslexia and it may results in few misspelled
> words in the content.
>
> Disclaimer: This communication may contain privileged or other
> confidential information and is intended exclusively for the addressee/s.
> If you are not the intended recipient/s, or believe that you may have
> received this communication in error, please reply to the sender indicating
> that fact and delete the copy you received and in addition, you should not
> print, copy, retransmit, disseminate, or otherwise use the information
> contained in this communication. Internet communications cannot be
> guaranteed to be timely, secure, error or virus-free. The sender does not
> accept liability for any errors or omissions.
>
> On Tue, Feb 28, 2017 at 7:41 AM, Charitha Goonetilleke <charit...@wso2.com
> > wrote:
>
>> Hi All,
>>
>> I think it is better to have a solution which could be implemented in
>> server side to distribute operations among devices. Because as we know
>> device agents in IoTS devices are different to each other. In according to
>> our architecture, we are letting anyone to write their own device types as
>> well as the agents. Also we don't have our own agent for windows devices
>> but using default windows workspace configurations to provide MDM. So
>> implementing agent side solution would be more complex for some device
>> types and will not move forward with all device types.
>>
>> Anyway as according what to suggested by Geeth & Menaka, we could use
>> batch processing in server side to deliver operation to device batches
>> rather than sending it to all devices. So we can use operation queue to
>> deliver operations periodically to device batches. However we need to
>> figure out few more things in there.
>>
>>
>>    1. How we figure out optimum number of devices we should call in a
>>    batch?
>>    2. What is the time span of delivering operation to all target
>>    devices?
>>    3. What we do if someone want to send operation immediately?
>>    4. Can we assure guaranteed delivery and can avoid repeated
>>    operations?
>>
>> For 1 & 2, we could use configuration to provide capability to set size
>> of a batch and time span. However for 3, we need to have additional option
>> to send operations immediately, probably using a priority queue. Also when
>> it comes to 4, we need to keep records about the operations we have
>> delivered and would be enough to add one additional operation status like
>> "Queued". So we can change operation status to pending, when operation is
>> delivered.
>>
>> WDYT?
>>
>> Thanks & Regards,
>> /charithag
>>
>> On Tue, Feb 28, 2017 at 12:39 AM, Menaka Jayawardena <men...@wso2.com>
>> wrote:
>>
>>> Hi,
>>>
>>> IMO we can send a timeout with the operation which, once the operation/
>>> notification is received by the device, it waits for the given timeout and
>>> respond back to the server to perform the operation. All operations are
>>> sent to devices at ones and the timeout should be different to each device.
>>> So that each device gets its own time to contact the server and complete
>>> the operation.
>>>
>>> Also, this can be used for batch processing as well.
>>> As an example, if there are 1000 devices, for first 100 devices, the
>>> timeout will be 0s, for next 100, 10s and so on. Then the first batch will
>>> come to the server just after they received the operation and the next
>>> batch will wait for 10s(or any given time) to respond back. This will
>>> reduce the overhead of waiting for a set of devices to complete the
>>> operation.
>>>
>>> I think through this we can limit the number of devices which contact
>>> the server at a given time and handle a reasonable amount.
>>>
>>> Appreciate any feedback.
>>>
>>> Thanks and regards,
>>> Menaka
>>>
>>>
>>> On Mon, Feb 27, 2017 at 11:09 PM, Geeth Munasinghe <ge...@wso2.com>
>>> wrote:
>>>
>>>> Hi all,
>>>>
>>>> We have encountered an issue with balancing load distribution of device
>>>> + server communication. Device and server communication happens through
>>>> following ways.
>>>>
>>>>    1. Polling - Device keeps polling the server
>>>>    2. Push notification - Server sends a notification to device to
>>>>    come retrieve the operation. (wake up call)
>>>>    3. Push message - Whole message is pushed to device as notification.
>>>>
>>>> In 1 and 2 ways, device always comes to server to pick up the
>>>> operation. (In MDM scenarios, we use only 1 and 2) We have found few
>>>> scenarios where this would lead to a request overload to the server.
>>>>
>>>>    1. Device information retrieval
>>>>    2. Device application list retrieval
>>>>    3. Device location retrieval
>>>>    4. Policy monitoring
>>>>    5. Installing/Uninstalling application (Role based)
>>>>
>>>> First four scenarios are handled by background tasks. These tasks are
>>>> responsible for adding an operation against each of the device. This
>>>> process would notify the device regarding operation or device will come to
>>>> server at a pre-configured time to retrieve the operation. Specially with
>>>> the notification process, when an operation is added to all the device,
>>>> notification is send to all of them. In iOS, we send to the notification to
>>>> APNS, for android - GCM/FCM and for Windows - WNS. These notification
>>>> services normally deliver the messages to devices quickly. Therefore as
>>>> soon as device receives the notification, it starts to contact the server.
>>>> If this happens with a server which has 1,000s of devices enrolled, most of
>>>> devices start retrieving the operation from the server which leads to a
>>>> request a burst. 5th scenario happens when we install an application to a
>>>> role which has 1,000s of users. This also starts sending notifications to
>>>> all the devices of those users, which would result in a request burst.
>>>>
>>>> As a solution, we can limit the number of devices notified at given
>>>> moment. Only set of devices will receive the notification at first, then
>>>> after some time interval second set of devices will receive the
>>>> notification and continue until all the devices are notified. This way, we
>>>> can make sure only chunk of devices receives the notification, hence reduce
>>>> the server load.
>>>>
>>>> Please give your feedbacks and suggestions.
>>>>
>>>> Thanks
>>>> Geeth
>>>>
>>>> --
>>>>
>>>> *G. K. S. Munasinghe*
>>>> *Senior Software Engineer,*
>>>> *WSO2, Inc. http://wso2.com <http://wso2.com/> *
>>>> *lean.enterprise.middleware.*
>>>>
>>>> email: ge...@wso2.com
>>>> phone:(+94) 777911226 <+94%2077%20791%201226>
>>>>
>>>> <http://wso2.com/signature>
>>>>
>>>
>>>
>>>
>>> --
>>> *Menaka Jayawardena*
>>> *Software Engineer - WSO2 Inc*
>>> *Tel : 071 350 5470*
>>> *LinkedIn: https://lk.linkedin.com/in/menakajayawardena
>>> <https://lk.linkedin.com/in/menakajayawardena>*
>>> *Blog: https://menakamadushanka.wordpress.com/
>>> <https://menakamadushanka.wordpress.com/>*
>>>
>>>
>>
>>
>> --
>> *Charitha Goonetilleke*
>> Software Engineer
>> WSO2 Inc.; http://wso2.com
>> lean.enterprise.middleware
>>
>> mobile: +94 77 751 3669 <%2B94777513669>
>> Twitter:@CharithaWs <https://twitter.com/CharithaWs>, fb: charithag
>> <https://www.facebook.com/charithag>, linkedin: charithag
>> <http://www.linkedin.com/in/charithag>
>>
>> <http://wso2.com/signature>
>>
>
>
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to